我正在使用EMMA工具进行代码覆盖,尽管我付出了最大的努力,但EMMA拒绝查看原始.java文件并逐行生成覆盖.
我们使用ANT来构建代码,并将debug设置为true.我知道EMMA正在测量覆盖率,因为.emma文件似乎正在生成并正确合并.报告能够以百分比呈现高水平的方法覆盖率.
但为什么它不会看到.java文件?我得到的是:[在源路径中找不到源文件'a/b/c/d/e/f/code.java']
我想在Scala项目中使用代码覆盖,使用Simple Build Tool作为构建工具.在这个项目中使用的最好的是什么.(我是这些技术的新手.)任何人都可以告诉我如何在我的项目中配置代码覆盖率.如果你能提供一个帮助我理解事情的例子.
我正在开发一个由.NET代码和android java项目组成的项目.我们试图让两种类型的项目都在一个TeamCity环境中运行.
.NET项目正在通过一些NUnit项目进行测试,我们使用DotCover生成覆盖报告,所有项目似乎都在膨胀.现在,android/java项目正在使用ant runners构建,我们已经为生产和测试项目提供了一些构建脚本,而且问题似乎是创建了java覆盖报告.
我们使用以下ant目标创建了一个构建步骤:
clean emma debug install test
Run Code Online (Sandbox Code Playgroud)
构建步骤设置为启用"Emma coverage runner"(选中"在coverage数据中包含源文件"选项).
运行构建步骤时发生错误,在日志片段中说明以下内容(已附加完整日志文件).另一个重要问题是android/java单元测试没有出现在构建的整体统计中.
这是日志snippit:
[16:37:52]: [aapt] Generating resource IDs...
[16:37:55]: [subant] -pre-compile
[16:37:55]: [subant] -compile (1s)
[16:37:55]: [-compile] do-only-if-manifest-hasCode (1s)
[16:37:55]: [do-only-if-manifest-hasCode] sequential (1s)
[16:37:55]: [sequential] if (1s)
[16:37:55]: [if] Adding debug=true parameter to javac task
[16:37:55]: [if] javac
[16:37:55]: [if] Compiling 1 source file to C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin\classes
[16:37:55]: [if] EMMA: Instrumenting classes
[16:37:55]: [EMMA: Instrumenting classes] EMMA commandline: [-ix, -*Test*, -cp, C:\BuildAgent\work\c588ac2d935670cb\MyAndroidProject\bin\classes, -m, overwrite]
[16:37:55]: [EMMA: Instrumenting classes] EMMA: …
Run Code Online (Sandbox Code Playgroud) 我刚刚写了一些简单的示例代码,以确保我正确安装了EclEmma.我没有得到100%的报道,我不明白为什么.突出显示它与类名有关.这是我的代码,以及相应的JUnit测试,EclEmma强调它的方式:
覆盖率结果显示三个指令Arithmetic
没有被击中,即使两个实际方法似乎完全覆盖:
我已经阅读了关于基本块覆盖的EclEmma文档,但我仍然感到困惑.我不确定错过了哪些基本块.起初,我认为EclEmma可能只是忽略了类的字节码,但ArithmeticTest
似乎处理得很好.
我有两个密切相关的问题:
我正在使用 Eclipse-STS + EclEmma 插件来查看我的代码的覆盖率。在我所有的抽象 util 类(只有静态方法)中,我Instructions Counter
在类定义行看到 3 个遗漏的指令(报告):
红线左侧没有可用的标记,所以我不知道这些说明究竟是什么。也许一些构造函数?我能做些什么来覆盖它们?
我正在使用以下命令在我的系统中运行 emma 代码覆盖工具,
D:\DeadLockDetection\DDinDOS>java -XX:UseSplitVerifier -cp emma.jar emmarun -jar process-3-1.0.jar
Run Code Online (Sandbox Code Playgroud)
运行上述命令时出现以下错误,
Missing +/- setting for VM option 'UseSplitVerifier'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题。
我的主要目标是使用CTL coverage.get在正在运行的Web应用程序上使用EMMA获取代码覆盖率.我使用emma maven插件.
因此,我使用检测代码部署我的Web应用程序.
在tomcat日志中看到:
EMMA: collecting runtime coverage data ...
Run Code Online (Sandbox Code Playgroud)
但没有:
EMMA: runtime controller started on port [47653]
Run Code Online (Sandbox Code Playgroud)
这意味着我无法使用ctl,因为没有人在听它.
运行时控制器无法启动的原因是什么?
我的父pom.xml:
<project>
...
<build>
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<inherited>true</inherited>
<executions>
<execution>
<id>instrument</id>
<phase>process-test-classes</phase>
<goals>
<goal>instrument</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
...
<reporting>
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<version>1.0-alpha-3</version>
<inherited>true</inherited>
</plugin>
...
</plugins>
</reporting>
...
</project>
Run Code Online (Sandbox Code Playgroud)
提前致谢.任何提示都受到高度赞赏.
我正在使用calabash-android测试我的android应用程序,它提供了自己的"测试项目",脚本重命名它的包以反映被测试的应用程序,然后使用InstrumentationTestRunner子类:
adb shell am instrument -w -e class sh.calaba.instrumentationbackend.InstrumentationBackend #{ENV['TEST_PACKAGE_NAME']}/sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner
Run Code Online (Sandbox Code Playgroud)
我会接受任何答案,允许我为Android应用程序生成类似于Emma或Cobertura的代码覆盖率报告,并在calabash-android中测试时收集数据.
coverage.em
生成一个文件target/emma
-e coverage true
"adb -e pull /data/data/my.project/files/coverage.ec coverage.ec
...所以现在我应该可以运行:
java -cp $ANDROID_HOME/tools/lib/emma.jar emma report -r html -in target/emma/coverage.em,coverage.ec
但是我收到一个错误:
EMMA: processing input files...
java.io.UTFDataFormatException: malformed input around byte 107
Run Code Online (Sandbox Code Playgroud)
...所以我认为android maven插件有问题,我正在试图弄清楚如何生成coverage.em
文件.我跑了" android update project -p .
"," ant emma
"和" ant emma debug
",但我无法在任何地方找到报道 ......
...生成的build.xml文件似乎暗示只有在运行"ant emma test"时才会生成coverage.em文件,但我认为这不会起作用,因为测试应用程序是由葫芦 - 机器人.
从这个问题:
在使用ant构建Android测试时,如何使用filter for emma?
我知道emma可以通过在目标项目的ant.properties中添加以下行来使用过滤器,而不是测试项目,
emma.filter=-com.your.excluded.package.*
Run Code Online (Sandbox Code Playgroud)
但如果我的目标项目是图书馆项目,它似乎无法正常工作.
我的工作区看起来像这样:
projectlib1 : lib project using lib2
projectlib1/tests : unit tests for lib1
projectlib2 : lib project using lib3
projectlib2/tests : unit tests for lib2
projectlib3 : stand alone lib
Run Code Online (Sandbox Code Playgroud)
当我为lib1运行覆盖时,我也获得了lib2和lib3的覆盖文件,这是我不想要的.我应该在哪里添加emma.filter?我试着将它放在每个项目的根部,但到目前为止它没有起作用.
任何建议欢迎!谢谢
我可以按照以下步骤获取代码覆盖率报告,
启用所需构建类型的覆盖范围(例如,调试)
buildTypes {
debug {
testCoverageEnabled true
}
}
应用Jacoco插件并设置版本
apply plugin: 'jacoco'
jacoco {
version "0.7.1.201405082137"
}
跑
./gradlew createDebugCoverageReport
运行connectedAndroidTest中的所有测试,并基于它们生成覆盖率报告.我可以在中找到报道报道
app/build/outputs/reports/coverage/{buildType}/index.html
和一个coverage.ec文件
app/build/outputs/code-coverage/connected/coverage.ec
但是没有jacoco.exec,因为我从Android Instrumentation而不是Robolectric测试用例运行.
当我从ADB运行仪器(我猜这仍然使用Emma)如下所示,我得到一个coverage.ec文件,如下所示,
$ adb shell am instrument -w -e coverage true -e coverageFile /sdcard/coverage.ec com.sample.helloworld.test/.Runner
....
OK (4 tests)
Generated code coverage data to /sdcard/coverage.ec
Run Code Online (Sandbox Code Playgroud)
但由于coverage.em文件丢失,我无法将coverage.ec转换为使用emma报告,
java -cp ~/adt-bundle-mac-x86_64-20130729/sdk/tools/lib/emma_device.jar emma report -r html -in \
coverage.em,myFile.ec,myapp_coverage1.ec -sp /path/to/myapp/src
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?