Java Unit Test
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。「经常与Mocktio一起使用」
JUnit 促进了“先测试后编码”的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。
这个方法就好比“测试一点,编码一点,测试一点,编码一点……”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。
1 JUnit 中的重要的 API
核心思想:通过断言来预言被测试方法是否按预期执行。
本文基于:JUnit 4.1.2
JUnit中的最重要的程序包是 junit.framework
它包含了所有的核心类。
一些重要的类列示如下:
序号 | 类的名称 | 类的功能 |
---|---|---|
1 | Assert | assert 方法的集合 |
2 | TestCase | 一个定义了运行多重测试的固定装置 |
3 | TestResult | TestResult 集合了执行测试样例的所有结果 |
4 | TestSuite | TestSuite 是测试的集合 |
1.1 Assert
Assert
类的重要方法列式如下:
序号 | 方法 | 描述 |
---|---|---|
1 | void assertEquals(boolean expected, boolean actual) | 检查两个变量或者等式是否平衡 |
2 | void assertFalse(boolean condition) | 检查条件是假的 |
3 | void assertNotNull(Object object) | 检查对象不是空的 |
4 | void assertNull(Object object) | 检查对象是空的 |
5 | void assertTrue(boolean condition) | 检查条件为真 |
6 | void fail() | 在没有报告的情况下使测试不通过 |
Assert
代码:
public class AssertTest {
@Test
public void testAssertions() {
//test data
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = null;
String str4 = "abc";
String str5 = "abc";
int val1 = 5;
int val2 = 6;
String[] expectedArray = {
"one", "two", "three"};
String[] resultArray = {
"one", "two", "three"};
//Check that two objects are equal
assertEquals(str1, str2);
//Check that a condition is true
assertTrue(val1 < val2);
//Check that a condition is false
assertFalse(val1 > val2);
//Check that an object isn't null
assertNotNull(str1);
//Check that an object is null
assertNull(str3);
//Check if two object references point to the same object
assertSame(str4, str5);
//Check if two object references not point to the same object
assertNotSame(str1, str3);
//Check whether two arrays are equal to each other.
assertArrayEquals(expectedArray, resultArray);
}
}
1.2 注解
Junit 中的注解的列表以及他们的含义:
序号 | 注解 | 描述 |
---|---|---|
1 | @Test | 这个注解说明依附在 JUnit 的 public void 方法可以作为一个测试案例。 |
2 | @Before | 有些测试在运行前需要创造几个相似的对象,在 public void 方法加该注释是因为该方法需要在 test 方法前运行。 |
3 | @After | 如果你将外部资源在 Before 方法中分配,那么你需要在测试运行后释放他们。在 public void 方法加该注释是因为该方法需要在 test 方法后运行。 |
4 | @BeforeClass | 在 public void 方法加该注释是因为该方法需要在类中所有方法前运行。 |
5 | @AfterClass | 它将会使方法在所有测试结束后执行,这个可以用来进行清理活动。 |
6 | @Ignore | 这个注释是用来忽略有关不需要执行的测试的,Junit 在类级别上使用 @Ignore 来忽略所有的测试用例。 |
7 | @Test(timeout=1000) | 测试用例执行时长大于指定的毫秒数,那么将自动被标记为失败。 |
8 | @Test(except=RuntimeException.class) | 测试用例抛出RuntimeException则pass。 |
9 | @RunWith(Parameterized.class) | 注入参数 |
1.2.1 @Before @After
使用@Before
,@After
后JUnite
执行过程:
- 1 beforeClass() 方法首先执行,并且只执行一次。
- 2 afterClass() 方法最后执行,并且只执行一次。
- 3 before() 方法针对每一个测试用例执行,但是是在执行测试用例之前。
- 4 after() 方法针对每一个测试用例执行,但是是在执行测试用例之后。
- 5 在 before() 方法和 after() 方法之间,执行每一个测试用例。
代码如下:
public class JunitAnnotation {
//execute before class
@BeforeClass
public