花了几天的时间来找出应该被单元测试涵盖但不是的一些代码行(我们自己的Java框架的代码)发生了什么之后,我们开始了一场竞赛,以找出如何重现这种奇怪的Cobertura的行为。而且我们知道了。
注意:我们的合规人员禁止发布我们框架的源代码或此处产生的任何类型的代码(与该问题有关)。仅允许我编写分步指南。
创建2个方法:
methodWithDeadCode()
返回的内容;和一个methodCoveredByUnitTests()
也返回了一些内容。
第一个必须位于第二个之上;
在methodWithDeadCode()
内:
myVar
并将其分配为null; if-else
语句,以验证有关myVar
的某些信息(例如myVar != null
); if
内写另一个if-else
来验证您想要的任何内容(重要的是,有2条if-else
语句已被链接); methodCoveredByUnitTests()
内:
methodCoveredByUnitTests()
(100%); methodCoveredByUnitTests()
正文中编写一些声明和赋值,以供单元测试进行测试; 使用cobertura-maven-plugin:2.7,我们发现methodCoveredByUnitTests()
由于methodWithDeadCode()
内的“死”代码而不会显示为Cobertura覆盖。
但是,如果我们切出methodCoveredByUnitTests()
并将其粘贴上方,则methodWithDeadCode()
Cobertura会认为它被覆盖了!!
注意:我已经在Cobertura's github page
上发布了一个问题我认为这是某种错误。但是你们怎么想的,伙计们?