目前为止,Spock测试都是手工进行的。完备的企业应用需要自动化拉取代码、编译、测试、生成报告,这就需要构建服务支撑,可以参考Jenkins并查询相关知识。假设你已知晓相关知识。

区分单元、集成和功能测试

功能测试需要真实环境副本进行测试。
单元测试速度快,集成和功能测试慢很多。
单元测试运行频繁,每次代码更改都需要运行;功能测试运行频率较低,一天甚至几天运行一次。
image.png
👆本例中,使用Maven启动Tomcat服务器来进行功能测试。使用mvn test运行单元测试,使用mvn verify运行功能测试(Tomcat服务启动之后)。使用Maven Failsafe插件Tomcat插件实现:

  1. [...rest of pom.xml....]
  2. <build>
  3. <plugins>
  4. [...rest of build plugins....]
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-failsafe-plugin</artifactId>
  8. <version>2.18</version>
  9. <executions>
  10. <execution>
  11. <goals>
  12. <goal>integration-test</goal>//集成测试
  13. <goal>verify</goal>//功能测试
  14. </goals>
  15. </execution>
  16. </executions>
  17. <configuration>
  18. <useFile>false</useFile>
  19. <includes>
  20. <include>**/*Spec.java</include>//被测试类
  21. </includes>
  22. </configuration>
  23. </plugin>
  24. <plugin>
  25. <groupId>org.apache.tomcat.maven</groupId>
  26. <artifactId>tomcat7-maven-plugin</artifactId>
  27. <version>2.2</version>
  28. <executions>
  29. <execution>
  30. <id>tomcat-run</id>
  31. <goals>
  32. <goal>run-war-only</goal>
  33. </goals>
  34. <phase>pre-integration-test</phase>
  35. <configuration>
  36. <fork>true</fork>
  37. </configuration>
  38. </execution>
  39. <execution>
  40. <id>tomcat-shutdown</id>
  41. <goals>
  42. <goal>shutdown</goal>
  43. </goals>
  44. <phase>post-integration-test</phase>//关闭tomcat
  45. </execution>
  46. </executions>
  47. </plugin>
  48. </plugins>
  49. </build>

👆这种配置只适合中小型应用,大型项目需要结合需求进行变更。

测试覆盖率

Spock测试覆盖率获取途径和之前使用JUnit是一样的——使用jacoco

  1. [...rest of build plugins here...]
  2. <plugin>
  3. <groupId>org.jacoco</groupId>
  4. <artifactId>jacoco-maven-plugin</artifactId>
  5. <version>0.7.4.201502262128</version>
  6. <executions>
  7. <execution>
  8. <id>prepare-agent</id>
  9. <goals>
  10. <goal>prepare-agent</goal>
  11. </goals>
  12. </execution>
  13. </executions>
  14. </plugin>
  15. [...rest of pom.xml here...]

代码质量检查可以使用SonarQube:
image.png