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.6 测试报告 - 图1

图 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.6 测试报告 - 图2

图 10-3 使用Eclipse JUnit插件打开失败的XML测试报告

从图10-3所示的堆栈信息中可以看到,该测试是由maven-surefire-plugin发起的。