被测系统(System Under Test,SUT):正在被测试的系统。
测试替身:
测试夹具:测试运行程序(test runner)会在测试方法之前自动进行初始化、资源回收的工作。
测试套件(test suite):
一个测试用例可以包含多个打上@Test注解的测试方法。
一、TestNG
TestNG是一种基于注解的测试框架。其生命周期为:类级初始化资源处理、方法级初始化资源处理、执行测试用例中的方法、方法级销毁资源处理、类级销毁资源处理。其中类级的资源处理在一个测试用例中执行一次。方法级的资源处理在每个方法中都运行一次。
如果在一个测试用例中有多个初始化方法,运行时先执行最后面的初始化方法,然后往前一个个运行。对于多个销毁资源的方法,按照顺序一个个运行。
public class TestNG {
private User user;
@Before
public void before() {
System.out.println("before method----------");
user = null;
}
@Before
public void before2() {
System.out.println("before method2----------");
user = null;
}
@After
public void after() {
System.out.println("after method---------");
}
@BeforeClass
public static void beforeClass() {
System.out.println("before class----------");
}
@AfterClass
public static void afterClass() {
System.out.println("after class---------");
}
@Test
public void test1() {
System.out.println(1);
}
@Test
public void test2() {
System.out.println(2);
}
@Test
public void test3() {
System.out.println(3);
}
// 10毫秒
@Test(timeout = 10,expected = NullPointerException.class)
public void testNull() {
Assert.assertNotNull(user.getUserRealName());
System.out.println(user.getUserRealName());
}
@Test
public void test() {
boolean flag = 1 > 2;
assert flag : "flag is false";
}
}
二、模拟利器Mockito
对于final类、匿名类和java的基本类型无法进行mock。
创建Mock对象:mock(Class<T>)和 @Mock注解。
设定Mock对象的期望行为和返回值:
when(mock.someMethod()).thenReturn(value);
doReturn(value).when(mock).someMethod();
doNothing(value).when(mock).someMethod();
验证交互行为:verify(mock,atLeast(2)).someMethod();
public class MockitoTest { IUserService mockUserService = mock(IUserService.class); // 对接口模拟对象 UserServiceImpl mockUserServiceImpl = mock(UserServiceImpl.class); // 对类模拟对象 @Mock User user; // 基于注解模拟类 @Before public void initMocks() { // 初始化所有@Mock注解模拟对象 MockitoAnnotations.initMocks(this); } @Test public void testMock() { when(mockUserService.getUserByNameAndPwd("tom","111")).thenReturn( new User("tom","111","tom","male",20) ); User u=mockUserService.getUserByNameAndPwd("tom","111"); Assert.assertNotNull(u); Assert.assertEquals(u.getUserRealName(),"tom"); when(user.getAge()).thenReturn(30); Assert.assertEquals(user.getAge().longValue(),30l);
verify(mockUserService).getUserByNameAndPwd("tom","111");
verify(mockUserService,atLeastOnce()).getUserByNameAndPwd("tom","111");
} }
三、测试整合之王Unitils