本书简介
英文名称:Test-Driven Java Development
作者: Viktor Farcic Alex Garcia
译者: 袁国忠
由人民邮电出版社2017年9月出版,笔者购买的是第一次印刷版本。
笔者最近在公司内部推广开发测试(developer test),也一直想了解TDD与单元测试的异同,以及在TDD下的开发模式与非TDD的差异。看到此书提供了较为丰富的TDD案例,因此,购买了此书。
第二章 工具、框架和环境
在第二章中,作者对开发测试的工具链进行了介绍,并就其中某些工具进行了比较。整理如下:
1 代码管理:Git
事实上的代码配置管理标准工具。后端可以是gitlab/github。这个在书中没有展开。
2 虚拟机:Vagrant + Docker
通过这个方案可以在windows下使用docker
3 构建工具 gradle
Gradle作为后来者,样板代码更少,配置文件更简短。集中了maven+Ant的优势,既有Maven的生命周期,以及与Maven依赖库的无缝集成,又可以和ant一样提供强大的功能。
当然在笔者所服务的公司,目前还是以Maven为主。在C#项目中则使用msbuild,而在C++项目中使用Make。
IDE
这个作为程序员吃饭的家伙,JAVA条线当然首推IntelliJ IDEA。文中推荐了社区版。
单元测试框架
作者在这里提出了一个重要的问题: 测试(用例)是什么?如何定义(一个测试用例) ?
笔者也认为,开发一个测试框架,其首要的任务也是回答上述问题。
在测试框架的选择上,JAVA条线的双子星座就是Junit和TestNG。
TestNG在用例组织等功能上毫无疑问是领先的,不过JUnit依旧是GitHUB/Maven Central等平台上的测试框架类的头牌。
断言
Hamcrest vs AssertJ
第一眼看到Hamcrest丰富的Matcher, 就摒弃了Junit自带的Assert。而在看到了AssertJunit漂亮流畅的Fluent Assert后,就从此推荐使用AssertJ作为断言工具了。
代码覆盖率工具
Jacoco vs Cobetura
Cobetrua还在更新! 并且由于出道较早,devops工具链上的集成较好。如笔者在C++项目中使用gcov做覆盖率统计时,就可以通过gcovr来生成cobetura格式的报告,这样就可以实现覆盖率统计结果的统一解析。
当然Jacoco更为易用,目前公司内部的Java项目中也主要以Jacoco作为覆盖率统计工具。
主要的坑来自于Jacoco与Powermock的Instrument冲突。目前只能通过offline-instument来解决,执行起来比较麻烦。
Mock框架
Mockito + Powermock, 简直就是神雕配侠侣。 关于这两者的具体使用,读者可以参考笔者发表的文集。
UI测试与BDD
感兴趣的读者可以参考笔者参与编著的《精通自动化测试框架设计》
关于BDD, 就JBehave/Cucumber而言,如果哪家公司可以由此工具支撑起10K以上的用例,请务必告之。感谢!