JUnit 4
maven 依赖管理
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version>
</dependency>
JUnit 依赖 hamcrest
<dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId><version>1.3</version>
</dependency>
初识JUnit4
public class Calculator {
public int evaluate(String expression) {int sum = 0;for (String summand: expression.split("\\+"))sum += Integer.valueOf(summand);return sum;}
}
import static org.junit.Assert.assertEquals;
import org.junit.Test;public class CalculatorTest {
@Testpublic void evaluatesExpression() {Calculator calculator = new Calculator();int sum = calculator.evaluate("1+2+3");assertEquals(6, sum);}
}
使用@Test
注解标记测试方法,使用assertEquals
断言判断计算结果是否与预期结果一致。这样就完成了一个单元测试代码的编写
@BeforeClass\@AfterClass 与 @Before\@After的区别
@BeforeClass \ @AfterClass | @Before \ @After |
---|---|
在一个类中只出现一次 | 在一个类中可以出现多次,执行顺序不确定 |
方法名不做限制 | 方法名不做限制 |
在类中只运行一次 | 在每个测试方法之前或之后都会运行一次 |
必须声明为public static | 必须声明为public且非static |
父类中标记该注解的方法会优先于当前类中标记该注解的方法执行 | 父类中标记该注解的方法会优先于当前类中标记该注解的方法执行 |
所有标识为@AfterClass的方法都一定会被执行,即使在标识为@BeforeClass的方法抛出异常的情况下也会执行 | 所有标识为@After的方法都一定会被执行,即使在标识为@Before或@Test的方法抛出异常的情况下也会执行 |
异常测试
通过在@Test
注解上添加expected
参数指定异常类,当测试方法没有抛出异常或抛出一个不同的异常,则测试失败
超时测试
通过在@Test
注解上添加timeout
参数指定超时时间。如果测试方法运行时间超过指定的毫秒数,则测试失败
JUnit为单元测试提供了一个默认的测试运行器BlockJUnit4ClassRuner
,为了能够一次执行多个测试方法,可以使用@RunWith(Suite.class)
指定Suite
测试运行器,利用@SuiteClasses({Junit4TimeoutTest.class,Junit4ExceptionTest.class})
指定要运行的测试用例