- 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类。