zoukankan      html  css  js  c++  java
  • junit4X系列源码--总体介绍

    原文出处:http://www.cnblogs.com/caoyuanzhanlang/p/3530267.html。感谢作者的无私分享。


    Junit是一个可编写重复测试的简单框架,是基于Xunit架构的单元测试框架的实例。Junit4最大的改进是大量使用注解(元数据),很多实际执行过程都在Junit的后台做完了,而且写test case 的类不需要继承TestCase,只需要在所要做test case的方法前加@Test 注解即可。

    如:

     View @Test Code

    直接点击右键,run as... Junit Test即可运行此test case。

    Assert类里面有很多assert方法,包括:assertEquals(), assertNotNull(),assertTtrue(),assertFalse(),assertThat()等,其中assertThat用的是match的形式。

    因此,Junit提供很多中Match,其中CoreMatchers是其中一个比较完善的实现类。具体有上面方法可以查阅CoreMatchers类。

     View Assert Code

    问题一,我可不可以把多个测试类放在一起执行?

    回答: 可以。org.junit.runner.JUnitCore.runClasses(TestClass1.class, ...);利用这样,把test case 的类放进去,然后放在main()方法里执行。

    问题二,@RunWith这个注解有什么作用?

    回答:Junit4的默认runner为BlockJunit4ClassRunner,但是Junit4包括第三方软件还提供很多其他的runner,这样如果,我们想让我们的测试类用专门的runner来运行,这时候就可以用@RunWith(Suit.class

    )标注测试类。其他特殊的runner有:

    1. Suite: 字面理解是一个套装,通俗地讲,就是你可以把很多测试类放在一起,然后建一个类,标注为Suite.class,那么如果执行这个类,就会把所有的测试类一起执行。

     View Suite Code

     

    2. Parameterized:根据所设计的参数来执行测试。假设我们要测试某一个方法,它有两个参数,每个参数需要设计不同值,那么我们最开始就是需要为每个参数设计一个测试方法,这样就很麻烦,10种case就得10个方法,但是有了Parameterized runner,我们可以设计一个方法,多种参数来执行test case。

     View CaculatorClassForTest Code

     

     

     View TestCaculatorClass Code

     

     以上两个类就是测试了Parameterized runner, 参数会自动匹配。它其实就是,看我们传入几种case, 也就是List.size(),然后,把类里面的方法,循环重复执行size()数目。

    3. Categories:容易理解就是分类执行。假设我们有一种case: 我们写好了两个测试类,类A,类B,A有两个方法a(), b(),这时候我们有一个类来执行这两个类的test case,但是我们在类A里只想执行A.b(),但却不执行A.a(),这个时候我们可以用Categories runner。

     View Categories Code
     

    4. Enclosed:如果我们把tests放在了内部类,这时候执行外部类是无法执行里面的test cases,这种情况下,就应该在outer class 用Enclosed runner。

    要测试的类 Address:

     View Address Code

    test case:

     View AddressTest Code

    问题三:不想执行某个类的test case 有什么方法?

    回答: 用@Ignore, 如果要让某个类都不执行,@Ignore放在类里,如果不想执行某一个方法,只需要放在方法上。

    复制代码
    1 @Ignore
    2 public class TestClass{
    3 
    4     @Ignore("Test is ignored as a demonstration")
    5     @Test
    6     public void testSane() {
    7         assertThat(1, is(1));
    8     }
    9 }
    复制代码

    问题四:某个test case执行时间太长,有什么办法终止?

    回答: Junit4提供了timeout属性。

    1 @Test(timeout=1000)
    2 public void testWithTimeout() {
    3   ...
    4 }

     

    Junit4还有更重要的@Rule 和 执行顺序。且听下回分解。

  • 相关阅读:
    python计算均值方差
    Linux shell一行流编程实践
    where are you from
    dinner vs supper
    Python格式化输出
    吐槽win8
    HTML学习(六)图像
    HTML学习(五)链接
    HTML学习(四)样式
    URL与String转换
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5232871.html
Copyright © 2011-2022 走看看