问:如何检测真实的测试覆盖率?
我注意到代码覆盖率度量和测试质量的一个问题:100%的代码覆盖率并不意味着代码真的被测试过。
有时测试会给出100%的覆盖率,即使它不能涵盖所有内容。问题在于覆盖率定义,我们假设覆盖率==可达代码。
但这不是真的,代码可以100%可访问,但不能100%覆盖测试。
举个例子,这个测试提供了100%的覆盖率(EMMA),但实际上它不包括将传递给服务模拟的值。所以,如果改变值,测试不会失败。
例子:
public class User {
public static final int INT_VALUE = 1;
public static final boolean BOOLEAN_VALUE = false;
public static final String STRING_VALUE = "";
private Service service;
public void setService(Service service) {
this.service = service;
}
public String userMethod() {
return service.doSomething(INT_VALUE, BOOLEAN_VALUE, STRING_VALUE);
}
}
并对其进行测试:
public class UserTest {
private User user;
private Service easyMockNiceMock;
@Before
public void setUp() throws Exception {
user = new User();
easyMockNiceMock = EasyMock.createNiceMock(Service.class);
}
@Test
public void nonCoverage() throws Exception {
// given
user.setService(easyMockNiceMock);
expect(easyMockNiceMock.doSomething(anyInt(), anyBoolean(), (String) anyObject())).andReturn("");
replay(easyMockNiceMock);
// when
user.userMethod();
// then
verify(easyMockNiceMock);
}
}
100%的覆盖率从来就不意味着100%的测试,任何声称100%的人要么不理解,要么是在骗你。覆盖率测量只是测量测试期间执行了什么产品代码。有几十种方法可以编写产生100%覆盖率的测试,然后不要完全测试你的代码。
最简单的方法是编写一个调用产品函数的测试,然后永远不要对返回值做出任何断言!
我写了一篇关于这个主题的博文:覆盖率度量中的缺陷,它以Python为中心,但概念都是一样的。
看看Jester,它执行突变测试。从网站:
Jester发现测试中没有包含的代码。Jester会对代码进行一些更改,运行测试,如果测试通过,Jester会显示一条消息,说明更改了什么。Jester包含一个脚本,用于生成网页,显示未导致测试失败的更改。
Jester不同于代码覆盖工具,因为它可以找到通过运行测试执行但未实际测试的代码。Jester的方法被称为变异测试或自动错误播种。然而,Jester并不是代码覆盖工具的替代品,只是一种补充方法。
这是一个重要的可量化指标,如果代码覆盖率很高,你就可以放心的修改代码,在发版本的时候也能睡个安稳觉。否则就是拆东墙补西墙,陷入无尽的 bug 诅咒中。 那么在 OpenResty 里面如何看到代码覆盖率呢?其实很简单,使用 LuaCov 可以很方便的实现。 我们先了解下 LuaCov,这是一个针对 Lua 脚本的代码覆盖率工具,通过 luarocks 来安装: luarocks install l
我的代码运行在具有单独JVM的单独虚拟机上。我想在此虚拟机上以tcpserver模式设置JaCoCo代理以收集覆盖率数据。然后,我将在我的maven项目中以tcpclient模式设置JaCoCo代理,以连接到上面提到的VM并获取覆盖率数据。 问题是代理不收集任何覆盖数据。在中创建了覆盖率数据文件,但该文件为空。 下面是代理选项:-Java agent:/usr/xx/plugins/org . j
问题内容: 我正在使用Mocha测试我的NodeJS应用程序。我无法弄清楚如何使用其代码覆盖功能。我尝试使用Google搜索,但没有找到任何合适的教程。请帮忙。 问题答案: 您需要一个额外的库来覆盖代码,而伊斯坦布尔的强大和便捷将使您震惊。通过Mocha测试后,请尝试以下操作: 现在,只需将命令nyc放在现有测试命令的前面,例如:
我在声纳中的代码覆盖率显示为0%,这不是真的,因为我有单元测试。 格拉德尔 当我打开inside然后我可以看到成功的单元测试。 我在Jenkins环境中运行作为
我正在为我的grails 3.1.6项目添加cobertura代码覆盖率,覆盖率报告似乎有点少,即我有单元测试用例(pos和neg两种情况)来覆盖if块,但报告说没有覆盖if块。gradle:2.13 Groovy:2.4.5 Grails:3.1.6 cobertura gradle Plugin:net.saliman:gradle-cobertura-plugin:2.3.2 这是我的代码
Jacoco插件在jenkins报告中显示0%的覆盖率,但当我在本地系统中运行相同的命令时,Jacoco会正确生成报告。我正在使用以下命令: mvn-s xyz/settings.xml-f xyz/xyz/pom.xml清洁安装org.jacoco 所以当我在jenkins中运行这个命令时,它会生成错误的报告。我已经检查了它在工作区目录对应的项目在詹金斯。它显示每个项目的0%覆盖率。但是当我在本