SonarQube 无法正确显示单元测试成功
SonarQube not correctly displays unit test success
首先:这与 SonarQube 不 显示单元测试成功无关。这个主题有很多问题和答案,但它们没有帮助。
我的设置:使用由 Maven 3.x
在 Jenkins 1.644
上触发的 SonarQube 5.2
和默认的 surefire 测试。这就是 SonarQube 中的结果:
如您所见,它正确显示了所有项目的单元测试成功。选择一个项目使我们获得封装测试的成功。在这一点上它变得奇怪了。例如 GUI 包:它表示 8.3% 的项目测试成功,但 0.0% 的包测试成功。这怎么可能?
我在 SonarQube 分析所基于的目录 <project dir>/target/surefire-reports
中寻找原因。在那里你可以看到三个生成的 .xml-files/classes:
文件中的一些摘录向我们展示了:
Test set: xxx.gui.main.AppConfigurationTest
Tests run: 4, Failures: 0, Errors: 4, Skipped: 0
Test set: xxx.gui.main.ConfigurationHolderTest
Tests run: 7, Failures: 0, Errors: 7, Skipped: 0
Test set: xxx.gui.servlet.XxxHttpServletTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
做一些计算得到 4 + 7 + 1 = 12 个总测试和 1 / 12 (success/total) = 8,3 %!这就是项目测试成功的地方。
问题是:为什么 class xxx.gui.servlet.XxxHttpServletTest 没有显示在 SonarQube 中(当然测试成功率是 100%)?你有什么想法吗?
The question is: why isn't class xxx.gui.servlet.J2uHttpServletTest displayed in SonarQube (with test success 100 % of course)? Have you got any idea?
此视图的目的是找到测试 classes 和测试包,这些包的测试有错误/失败,需要审查/更正。因此,仅显示成功率低于 100% 的测试 classes。
显示所有包/测试 classes 100% 成功会产生视觉噪音。这是一个好的/坏的方法吗?好吧,一旦你理解了这一点,你就知道如何解释这些信息了。
恕我直言,真正的问题是 "what's the point in displaying %age of test success?" 每个测试的失败测试数 class / 包是比 %age 更好的信息,因为您可以使用它来计划操作.
确实,我不明白为什么知道一个测试 class 有 60 个测试是“50% 损坏”(30 个测试要修复)比另一个有 10 个测试是“60% 损坏” “......(6 个测试要修复。)对我来说,两者都坏了,需要修复,点。数字应该只帮助我定义解决问题所需的努力(即 36 次修复测试是非常清楚的,不是 50%,也不是 60%...)
旁注:测试成功百分比是一个 "all or nothing" 指标。 99.99% 的测试成功不是一种选择(您的集成构建应该失败,并且您的代码根本不应该投入生产。)
首先:这与 SonarQube 不 显示单元测试成功无关。这个主题有很多问题和答案,但它们没有帮助。
我的设置:使用由 Maven 3.x
在 Jenkins 1.644
上触发的 SonarQube 5.2
和默认的 surefire 测试。这就是 SonarQube 中的结果:
如您所见,它正确显示了所有项目的单元测试成功。选择一个项目使我们获得封装测试的成功。在这一点上它变得奇怪了。例如 GUI 包:它表示 8.3% 的项目测试成功,但 0.0% 的包测试成功。这怎么可能?
我在 SonarQube 分析所基于的目录 <project dir>/target/surefire-reports
中寻找原因。在那里你可以看到三个生成的 .xml-files/classes:
文件中的一些摘录向我们展示了:
Test set: xxx.gui.main.AppConfigurationTest
Tests run: 4, Failures: 0, Errors: 4, Skipped: 0
Test set: xxx.gui.main.ConfigurationHolderTest
Tests run: 7, Failures: 0, Errors: 7, Skipped: 0
Test set: xxx.gui.servlet.XxxHttpServletTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
做一些计算得到 4 + 7 + 1 = 12 个总测试和 1 / 12 (success/total) = 8,3 %!这就是项目测试成功的地方。
问题是:为什么 class xxx.gui.servlet.XxxHttpServletTest 没有显示在 SonarQube 中(当然测试成功率是 100%)?你有什么想法吗?
The question is: why isn't class xxx.gui.servlet.J2uHttpServletTest displayed in SonarQube (with test success 100 % of course)? Have you got any idea?
此视图的目的是找到测试 classes 和测试包,这些包的测试有错误/失败,需要审查/更正。因此,仅显示成功率低于 100% 的测试 classes。
显示所有包/测试 classes 100% 成功会产生视觉噪音。这是一个好的/坏的方法吗?好吧,一旦你理解了这一点,你就知道如何解释这些信息了。
恕我直言,真正的问题是 "what's the point in displaying %age of test success?" 每个测试的失败测试数 class / 包是比 %age 更好的信息,因为您可以使用它来计划操作.
确实,我不明白为什么知道一个测试 class 有 60 个测试是“50% 损坏”(30 个测试要修复)比另一个有 10 个测试是“60% 损坏” “......(6 个测试要修复。)对我来说,两者都坏了,需要修复,点。数字应该只帮助我定义解决问题所需的努力(即 36 次修复测试是非常清楚的,不是 50%,也不是 60%...)
旁注:测试成功百分比是一个 "all or nothing" 指标。 99.99% 的测试成功不是一种选择(您的集成构建应该失败,并且您的代码根本不应该投入生产。)