10.6 测试报告
除了命令行输出,Maven用户可以使用maven-surefire-plugin等插件以文件的形式生成更丰富的测试报告。
10.6.1 基本的测试报告
默认情况下,maven-surefire-plugin会在项目的target/surefire-reports目录下生成两种格式的错误报告:
简单文本格式
与JUnit兼容的XML格式
例如,运行10.1.3节代码清单10-10中的RandomGeneratorTest后会得到一个名为com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest.txt的简单文本测试报告和一个名为TEST-com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest.xml的XML测试报告。前者的内容十分简单:
------------------------------------------------------------------------
Test set: com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest
------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec
这样的报告对于获得信息足够了,XML格式的测试报告主要是为了支持工具的解析,如Eclipse的JUnit插件可以直接打开这样的报告,如图10-2所示。
图 10-2 使用Eclipse JUnit插件打开成功的XML测试报告
由于这种XML格式已经成为了Java单元测试报告的事实标准,一些其他工具也能使用它们。例如,持续集成服务器Hudson就能使用这样的文件提供持续集成的测试报告。
以上展示了一些运行正确的测试报告,实际上,错误的报告更具价值。我们可以修改10.1.3节代码清单10-11中的AccountCaptchaServiceTest让一个测试失败,这时得到的简单文本报告会是这样:
------------------------------------------------------------------------
Test set: com.juvenxu.mvnbook.account.captcha.AccountCaptchaServiceTest
------------------------------------------------------------------------
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.932 sec < < <
FAILURE!
testValidateCaptchaCorrect (com.juvenxu.mvnbook.account.captcha. AccountCaptchaServiceTest)
Time elapsed: 0.047 sec < < < FAILURE!
java.lang.AssertionError:
at org.junit.Assert.fail(Assert.java:91)
at org.junit.Assert.assertTrue(Assert.java:43)
at org.junit.Assert.assertTrue(Assert.java:54)
at com.juvenxu.mvnbook.account.captcha.AccountCaptchaServiceTest.testVal-
idateCaptchaCorrect(AccountCaptchaServiceTest.java:66)
……
报告说明了哪个测试方法失败、哪个断言失败以及具体的堆栈信息,用户可以据此快速地寻找失败原因。该测试的XML格式报告用Eclipse JUnit插件打开,如图10-3所示。
图 10-3 使用Eclipse JUnit插件打开失败的XML测试报告
从图10-3所示的堆栈信息中可以看到,该测试是由maven-surefire-plugin发起的。