Junit学习笔记(一):Junit的入门使用

时间:2022-08-01 05:06:51
  • junit4和junit3的区别

    JUnit4中所有的测试用例采用@Annotation标注,JUnit3的通过类继承和特定方法名实现,Junit4比Junit3更灵活。

  • JUnit的生命周期

   @BeforeClass、@Before、@Test、@After、@AfterClass

   <<Before Class>>
     <<Person Constructor>>
       <<Before>>
       Test Method 1.
       <<After>>
     <<Person Constructor>>
       <<Before>>
       Test Method 2.
       <<After>>
   <<After Class>>

   @BeforeClass:修饰static的方法,在整个类执行之前执行该方法一次。比如你的测试用例执行前需要一些高开销的资源(连接数据库)可以用@BeforeClass搞定。值得注意的是如果测试用例类的父类中也存在@BeforeClass修饰的方法,它将在子类的@BeforeClass之前执行。
   @AfterClass:同样修饰static的方法,在整个类执行结束前执行一次。如果你用@BeforeClass创建了一些资源现在是时候释放它们了。
   @Before:修饰public void的方法,在每个测试用例(方法)执行时都会执行。
   @After:修饰public void的方法,在每个测试用例执行结束后执行。
   Constructor:每个测试用例都会重新创建当前的Class实例,可以看到Constructor执行了两次。

  • 注解参数

  异常测试:使用@Test中的expected参数

  测试时间:使用@Test中的timeout参数

      @Ignore:忽略某个测试用例

  @RunWith:制定测试运行器,如果不指定将使用默认的;

  JUnit中所有的测试用例都是由测试运行器执行的。JUnit提供了默认的测试运行器,但并没有限制我们必须使用默认的运行器(所有的运行器都继承自Runner)。相反,我们不仅可以定制自己的运行器,而且还可以为每个测试类指定使用某个运行器(使用@RunWith)。

  @Suite:测试套件

  用于指定测试的测试组,批量运行测试类的方法;注意:不要有相互包含关系的测试类,死锁。

  @RunWith(Parameterized.class):参数化测试

  指定测试的输入参数

    @Category :测试分组

  可以对各个测试用例进行分组,使你有机会只选择需要的部分用例。

  @IncludeCategory:限制只运行部分测试用例

  @Theory:提供组合的参数

  •  Rule

  包含两个注解@Rule和@ClassRule用于修饰Field或返回Rule的 Method,Rule是一组实现了TestRule接口的共享类,提供了验证、监视TestCase和外部资源管理等能力。

  ClassRule提供针对整个类的规则。

    Verifier: 验证测试执行结果的正确性。
    ErrorCollector: 收集测试方法中出现的错误信息,测试不会中断,如果有错误发生测试结束后会标记失败。
    ExpectedException: 提供灵活的异常验证功能。
    Timeout: 用于测试超时的Rule。
    ExternalResource: 外部资源管理。
    TemporaryFolder: 在JUnit的测试执行前后,创建和删除新的临时目录。
    TestWatcher: 监视测试方法生命周期的各个阶段。
    TestName: 在测试方法执行过程中提供获取测试名字的能力。

  • Assume

  Assume直译为假设,是JUnit提供的一套用于判断测试用例的入参是否有业务含义的工具,如果入参不符合预期时会抛出AssumptionViolatedException,默认的BlockJUnit4ClassRunner及其子类会捕获这个异常并跳过当前测试,如果使用自定义的Runner则无法保证行为,视Runner的实现而定。 
  Assume提供的验证方法包括: assumeTrue/assumeFalse、 assumeNotNull、 assumeThat、 assumeNoException

  • Assert

   Assert是JUnit提供的断言类,用于常用的测试结果验证。提供的功能和方法都比较简单实用,这里只用列表简单介绍:
    AssertTrue、AssertFalse:结果的true、false。
    AssertThat:使用Matcher做自定义的校验。
    AssertEquals、AssertNotEquals:判断两个对象是否相等。
    AssertNull、AssertNotNull:判断对象是否为空。
    AssertSame:判断两个对象是否为同一个,不同于equals这里是使用“==”判断。
    AssertArrayEquals:判断两个数组是否相等。

 

拓展阅读:

Ant 内置了对 JUnit 的支持,它提供了两个 Task:junit 和 junitreport,分别用于执行 JUnit 单元测试和生成测试结果报告。

除此以外Theories还可以支持自定义数据提供的方式,需要继承JUnit的ParameterSupplier类。