JUnit 测试框架(JUnit 3以上版本)的主要特性如下:
- TestCase 测试工具
- Test Suite 测试套件
- Test Runner 测试运行器
TestCase 测试工具
JUnit 3中,使用TestCase可确保测试方法能够在共享且固定的环境中运行,以保证测试结果的可重复性。
继承TestCase即可作为测试类,测试类中的所有public方法(除覆盖父类中的方法),都会被作为测试方法执行。
测试类可覆盖TestCase父类中的以下两个方法:
- setUp() 在每个测试方法执行前会被自动调用(可使用JUnit 4中的
@Before
替代)。 - tearDown() 在每个测试方法执行后会被自动调用(可使用JUnit 4中的
@After
替代)。
注意: TestCase作为JUnit 3中提供的测试工具,其功能在JUnit 4中仍然兼容。
但TestCase所有功能都可被JUnit 4提供的注解替代,而且其易用性、灵活性都不如注解。
本文只是对其进行介绍,并非推荐使用TestCase。
一个简单的TestCase使用示例:
import junit.framework.TestCase;
public class HelloTest extends TestCase {
private int value = 0;
public void setUp() {
value = 1;
}
public void tearDown() {
value = 0;
}
public void testA() {
assertTrue(value == 1);
value = 2;
}
public void testB() {
assertTrue(value == 2);
}
}
使用mvn test
命令执行测试:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running HelloTest
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.082 sec <<< FAILURE!
testB(HelloTest) Time elapsed: 0.01 sec <<< FAILURE!
Results :
Failed tests: testB(HelloTest) : value was reset by setUp
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
Test Suite 测试套件
测试套件可以将多个测试类捆绑在一起按照顺序执行。
测试套件使用方式:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({HelloTest1.class, HelloTest2.class, HelloTest3.class})
public class HelloTestSuite {
/* empty class */
}
注意:单个测试类中存在的多个测试方法时,所有测试方法都会被执行。
Test Runner 测试运行器
测试运行器用于运行测试类,并返回测试结果。
public class HelloTestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(HelloTest.class);
if (result.getFailureCount() > 0) {
for (Failure failure : result.getFailures()) {
System.out.println("Failure message:" + failure.toString());
}
}
System.out.println("Test was successful:" + result.wasSuccessful());
}
}
运行结果:
Failure message:testB(HelloTest): value was reset by setUp
Test was successful:false
网友评论