JUnit单元测试、正则表达式
JUnit单元测试
JUnit测试
单元测试
1)单元测试是针对最小的功能单元编写测试代码
2)Java程序最小的功能单元是方法
3)单元测试就是针对单个Java方法的测试
测试驱动开发TDD:Test-Driven Development
JUnit的设计:
1)TestCase:一个TestCase表示一个测试
2)TestSuite:一个TestSuite包含一组TestCase,表示一组测试
3)TestFixture:一个TestFixture表示一个测试环境
4)TestResult:用于收集测试结果
5)TestRunner:用于运行测试
6)TestListener:用于监听测试过程,收集测试数据
7)Assert:用于断言测试结果是否正确
版本 | JUnit 3.x | JUnit 4.x | JUnit 5.x |
---|---|---|---|
JDK | <1.5 | >=1.5 | >=1.8 |
class | class MyTest extends TestCass{} | class MyTest{} | class MyTest{} |
method | public testAbc(){} | @Test public abc(){} | @Test public abc(){} |
使用Assert断言
1)assertEquals
2)assertArrayEquals
3)assertNull
4)assertTrue
5)assertFalse
6)assertNotEquals
7)assertNotNull
如何编写单元测试
1)一个TestCase包含一组相关的测试方法
2)每个测试方法必须完全独立
3)测试代码必须非常简单
4)不能为测试代码再编写测试
5)测试需要覆盖各种输入条件,特别是边界条件
JUnit使用
使用Before和After
Test Fixture:初始化测试资源称为Fixture
@Before和@After
1)在@Before方法中初始化测试资源
2)在@After方法中释放测试资源
@BeforeClass和@AfterClass静态方法
1)在执行所有@Test方法前执行@BeforeClass静态方法
2)在执行所有@Test方法后执行@AfterClass静态方法
静态字段的状态会影响到所有的@Test
理解JUnit执行测试的生命周期
invokeBeforeClass(CalculatorTest.class); // @BeforeClass
for(Method testMethod : findTestMethods(CalculatorTest.class)){
CalculatorTest test = new CalculatorTest(); // new
test.setUp(); // @Before
testMethod.invoke(test); // @Test
test.tearDown(); // @After
}
invokeAfterClass(CalculatorTest.class); // @AfterClass
@Before:初始化测试对象,例如:input = new FileInputStream();
@After:销毁@Before创建的测试对象,例如:input.close();
@BeforeClass:初始化非常耗时的资源,例如:创建数据库
@AfterClass:清理@BeforeClass创建的资源,例如:删除数据库
异常测试
测试异常可以使用@Test(excepted=Exception.class)
1)如果抛出了指定类型的异常,测试成功
2)如果没有抛出指定类型的异常,或者抛出的异常类型不对,测试失败
对可能发生的每种类型的异常进行测试
参数化测试
Parameterized Test:参数化测试可以把测试数据统一管理
可以用测试数据对同一个测试方法反复测试
@RunWith(Parameterized.class)
public class AbsTest{
@Parameters
public static Collection<?> data(){
return Arrays.asList(new Object[][]{
{
0, 0}, {
1, 1}, {
-1, 1}
});
}
int input;
int expected;
public AbsTest(int input, int expected){
this.input = input;
this.expected = expected;
}
@Test
public void testAbs(){
int r = Math.abs(this.input);
assertEquals(this.expected, r);
}
}
超时测试
可以为JUnit的单个测试设置超时: