那么让我们说我有一个测试
@Test
public void testA(){
new A().doSomthing();
}
Run Code Online (Sandbox Code Playgroud)
让我们说它涵盖了一个方法doSomething()
,现在在我的项目中,我有1000万个测试,而这个测试只是其中之一.一个小小的测试做得不多.
现在让我们说我的doSomething
方法如下: -
public void doSomething() {
if (var1)
killMylSelf();
else if (var2)
killMyMother();
else
killMySelfAndMyMother();
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到方法中有很多分支,因此调用其他具有更多分支的方法.当我跑步时,testA
我希望看到我在执行的代码中错过了哪些分支,如何在不运行所有单元测试的情况下实现这一点,而且只关注我关注的测试,
当你回答这个问题而没有运行所有的单位测试时,请记住这些神奇的单词,而且只关注我关心的测试
我在 pom 中的 jacoco 插件配置如下
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<executions>
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${jacoco.ut.execution.data.file}</destFile>
</configuration>
</execution>
<execution>
<id>merge-execs</id>
<phase>pre-site</phase>
<inherited>false</inherited>
<goals>
<goal>merge</goal>
</goals>
<configuration>
<fileSets>
<fileSet>
<directory>${basedir}</directory>
<includes>
<include>**/target/*.exec</include>
</includes>
</fileSet>
</fileSets>
<destFile>${jacoco.ut.merged.exec}</destFile>
</configuration>
</execution>
<execution>
<id>jacoco-check</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
</rules>
<dataFile>${jacoco.ut.merged.exec}</dataFile>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是当我运行时mvn jacoco:check
它失败并出现以下错误
[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.7.5.201505241946:check (default-cli) on project main: The parameters 'rules' for …
Run Code Online (Sandbox Code Playgroud) 我正在使用 JaCoCo 生成代码覆盖率报告,并且我有许多场景需要生成单独的报告。问题是该程序非常庞大,大约需要 2 分钟才能启动并加载所有类文件。
我想在其中一个场景完成后立即获取运行时的执行数据,然后开始下一个场景,而不是为每个场景重新启动服务器。
有办法这样做吗?
我的项目是使用 Maven 构建的。我使用“Jacoco”插件来执行质量检查。
对于一个项目,我想在线检查测试覆盖率。我只想检查仅 3 个包裹的线路覆盖率。如何指定此检查?
我尝试“包括”一些软件包,但这不起作用。我还尝试包含根包级别并排除许多其他包。也不工作。
我如何检查包裹 A、B 和 C?请参阅下面的示例:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
...
<execution>
<id>jacoco-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>PACKAGE</element>
<includes>
<include>nl.abc.xyz.package-a.**</include>
<include>nl.abc.xyz.package-b.**</include>
<include>nl.abc.xyz.package-c.**</include>
</includes>
...
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.30</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud) 我有一个关于Eclemma插件配置的问题:在生产代码中我有很多java核心断言,比如:
assert arr.size() == 2 : "message";
Run Code Online (Sandbox Code Playgroud)
当我在单元测试中运行Eclemma时,由于断言上的黄色标记,它显示低覆盖率.放置断言的想法不是有可能以断言的负面情况结束(它永远不会发生!),它们只是代码质量保护,仅此而已.但另一方面,Eclemma认为这些否定案例并未涵盖声明的分支(这是marazmatic :)),因此它将它们标记为黄色.
那么,问题是:如何配置Eclemma忽略覆盖率报告中的"断言"代码行?
我使用覆盖模式运行我的应用程序,但是文件的代码上没有颜色。是否有宏(或其他解决方案)来显示 Eclipse 中的覆盖颜色?
我发现在JUnit测试中没有检查代码覆盖率的唯一方法是右键单击包,选择Coverage as ...,然后选择配置.然后我可以取消我的测试包.我曾尝试各种可能的组合,排除测试的常规首/ JAVA /代码覆盖下/排除并没有看到任何变化.我总是把我的测试放在一个单独的测试源文件夹中,其包名与我的src代码相同.
我是否真的必须配置每个项目以忽略我的JUnit测试?这似乎是多余的.为什么有人想检查测试的覆盖范围?
我正在开发一个项目,我们正在使用TestNG和JUnit进行测试.
不幸的是,在编写TestNG测试时,他们不会在JaCoCo Coverage报告中考虑.
我写了一个testng.gradle
文件,我将其包含在每个build.gradle
文件中(这是一个多模块项目):
task testNG(type: Test) { useTestNG() }
test.dependsOn testNG
Run Code Online (Sandbox Code Playgroud)
JUnit和TestNG测试都以这种方式工作.
如果我写testng.gradle
这样的话:
test {
useTestNG()
}
Run Code Online (Sandbox Code Playgroud)
JaCoCo工作正常,但显然只有TestNG测试才能执行.
我该如何解决?这是Gradle的JaCoCo插件中的错误吗?
我将jacocoagent.jar
0.8.1 版作为 Java 代理传递,以将服务器上的代码覆盖率记录到我的服务器启动脚本中。但是我看到 jar 中缺少 Pre-main 类属性,因此,我收到以下错误:
Error occurred during initialization of VM
Failed to find Premain-Class manifest attribute in
/u01/jetty_home/jacoco/jacocoagent.jar
agent library failed to init: instrument.
Run Code Online (Sandbox Code Playgroud)
有没有人有关于如何解决这个问题的想法?
当我在实时应用程序上执行某些场景时,即当应用程序在服务器中运行时,我想获得代码覆盖率报告(或跟踪应用程序的控制器流程),因此我参考了官方Jacoco 文档并按照以下方式执行
第一步,我尝试将 jacoco 代理绑定到应用程序运行端口
export MAVEN_OPTS=-javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runtime.jar=includes=*,output=tcpserver,port=6300,address=*,dumponexit=true
Run Code Online (Sandbox Code Playgroud)
然后我启动了服务器并执行了一些测试场景,当时我还请求 jacoco 通过执行以下命令来获取转储
mvn jacoco:dump
Run Code Online (Sandbox Code Playgroud)
当我首先执行上面的命令时,它显示如下java.net.BindException: Address already in use
,然后它打印为休闲
[INFO] Connecting to localhost/127.0.0.1:6300
Run Code Online (Sandbox Code Playgroud)
当我停止服务器时,在我请求通过执行以下命令生成 jacoco 报告后,jacoco.exec已生成到已知位置
mvn jacoco:report
Run Code Online (Sandbox Code Playgroud)
最后我收到了报告,但当我打开 index.html 页面时,它显示了0%
覆盖范围。
您可以通过以下示例 Spring MVC 项目重现我的困难
请从 Github下载 Spring MVC 项目https://github.com/mkyong/spring4-mvc-ajax-example
就我而言,我使用 WildFly 8.x 服务器来运行项目并将以下依赖项添加到下载的项目 pom.xml
maven-surefire-plugin of 2.19.1 version
jacoco-maven-plugin of 0.7.4.201502262128 version
junit of 4.12 version
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令清理并构建项目。
mvn clean install
Run Code Online (Sandbox Code Playgroud)
完成后,从项目的目标文件夹中获取 .war 文件并将其保存在 wildflyserverwildfly-9.0.0.CR2/standalone/deployments/
文件夹中
部署 .war 后,转到/wildfly-9.0.0.CR2/bin/
文件夹并执行/运行该./standalone.sh
文件,或者根据平台,您可以运行该 …
在我的 gradle 项目中,我没有jacocoTestReport.xml
使用jacoco.xml
. jacoco.xml
和 之间有什么区别jacocoTestReport.xml
?
在 Google 上,这两个文件之间的区别尚不清楚。
PS:我问的原因是Code Climate需要一个jacoco.xml
代码覆盖率文件。
jacoco ×9
java ×4
eclemma ×3
gradle ×3
eclipse ×2
junit ×2
android ×1
assertions ×1
ignore ×1
junit4 ×1
maven ×1
multi-module ×1
testng ×1
unit-testing ×1