五、Spring ——单元测试

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组合,来模拟真实用户的操作及跨浏览器兼容等测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,308评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,022评论 6 342
  • 回顾: 《谈谈为什么写单元测试》 基本单元测试框架 Java单元测试框架:Junit、Mockito、Powerm...
    键盘男阅读 50,715评论 19 160
  • 单元测试 单测定义 单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进...
    运维开发笔记阅读 6,062评论 0 2
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 5,688评论 0 3