一、单元测试的原则
1、如何处理单元测试与集成测试的关系?
建议把单元测试和集成测试利用Surefire插件和Failsafe插件分开执行,单元测试类名以“Test”结尾,集成测试类名以“IT”结尾;
单元测试的测试粒度要足够小,至多是类级别,一般是方法级别,方便精确定位问题;
集成测试负责跨类或者跨系统交互逻辑的测试,通常需要依赖外界环境,耗时通常会比较多。
2、单元测试应该覆盖哪些类?
单元测试的基本目标:语句覆盖率达到 70%,核心模块的语句覆盖率和分支覆盖率都要达到 100%;
核心模块一般是复用度比较高的偏底层的部分,包括数据库访问层、外部接口调用层和业务层中重用度高的部分等。
对于单元测试未覆盖到的类,可以通过集成测试来补充。
3、单元测试应该覆盖哪些场景?
【推荐】编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量。
B: Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。
C: Correct,正确的输入,并得到预期的结果。
D: Design,与设计文档相结合,来编写单元测试。
E: Error,强制错误信息输入(如:非法数据、异常流程、非业务允许输入等),并得
到预期的结果。
- 被测代码依赖外界环境怎么办?
单元测试不应该受到外界环境影响,用mock隔离依赖;集成测试尽可能用真实的环境,必要时也可以用mock。
二、开源项目中的单元测试
Apollo:github.com/ctripcorp/a…
Netty:github.com/netty/netty
Dubbo:github.com/apache/dubb…
Californium:github.com/eclipse/cal…
Jetty:github.com/eclipse/jet…
三、在持续集成系统中运行单元测试
1、指定apollo配置信息:读取开发环境Apollo
这里通过配置属性让Surefire插件同时运行单元测试用例和集成测试用例。
- 授权打包机器访问测试环境数据库
用户名和密码要跟开发环境Apollo中配置的保持一致。
3、添加“单元测试”任务到流水线
默认只读取和展示父模块的测试报告,不遍历和汇总子模块的测试报告。这里指定读取和展示API模块的测试报告。
参考:
《阿里巴巴Java开发手册(终极版)》