被测系统(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