1、JUnit4
JUnit测试用例的完整生命周期要经历一下阶段:类级初始化资源处理,方法级初始化资源处理、执行测试用例中的方法、方法级销毁资源处理、类级销毁资源处理。
- 测试方法 @Test
- 初始化 @BeforeClass、@AfterClass和@Before、@After
- 异常测试 @Test(expected=NullPointerException.class)
- 超时测试 @Test(timeout=10)
- assertThat 断言
2、模拟利器Mockito
创建Mock对象
//对接口进行模拟 UserService mockUserService = mock(UserService.class); //对类进行模拟 UserServiceImpl mockUserServiceImpl = mock(UserServiceImpl.class); //基于注解的模拟@Mock User mockUser; @Before public void initMocks(){ //初始化当前测试类所有@Mock注解模拟对象 MockitoAnnotations.initMocks(this); }
设定Mock对象的期望行为及返回值
//模拟方法设定返回值when(mockUserService.findUserByUserName("tom").thenReturn(new User("tom", "1234")); doReturn(true).when(mockServiceImpl).hasMatchUser("tom","1234");
3、测试整合之王 Unitils
Unitils构建在DBUnit与EasyMock项目之上并与JUnit和TestNG相结合,支持数据库测试,支持利用Mock进行测试并提供Spring和Hibernate相集成。Unitils设计成以一种高度可配置和松耦合的方式来添加这些服务到单元测试中。
4、 单元测试实际运用
对DAO层的测试,结合Untils、DbUnit框架,编写一个支持Excel格式的数据集工厂类,实现使用Excel准备测试所需要的数据及验证数据,从而大大减少测试DAO层工作量。
对Service层的测试,采用Junit+Unitils+Mockito组合,运用Mockito强大的模块能力,完成对service层独立性测试,也可以用JUnit+Unitils+Dbunit组合,运用Dbunit强大的数据库维护能力,完成Service层+DAO层集成测试。
对Web层的测试,既可以采用JUnit+Unitils+Spring Mock组合,运用Spring Mock模拟依赖于容器的接口实例,如HttpServletRequest、ServletContext等,完成Web层中控器独立性测试;也可以采用JUnit+Unitils+Spring RestTemplate,完成Web层集成测试;还可以采用JUnit+Selenium组合,来模拟真实用户的操作及跨浏览器兼容等测试。