- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在运行单元测试时获得代码覆盖率。我跑 ant coverage
使用标准的 android build.xml 进行测试。
测试运行良好。来自 ant coverage
的最后一个字符串是
Tests run: 59, Failures: 1, Errors: 4
Generated code coverage data to /data/data/my.package/files/coverage.ec
但 coverage.ec 文件只有 37 个字节长,几乎是空的。
在其上运行 emma 报告
no collected coverage data found in any of the data files [all reports will be empty]
并在每个字段中生成带有零的漂亮报告。
我想 emma 应该会产生更大的 coverage.ec。
我做错了什么?
---更新---
做了一些深入挖掘。似乎除了覆盖结果生成之外,大多数事情都很好。
1) 它编译一切说
[javac] /blabla/android-sdk-linux_x86/tools/ant/main_rules.xml:384: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 88 source files to /blabla/project/tests/instrumented/classes
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
2) 它正在做 <instr>
与 mode="overwrite"
对于正在测试的项目。路径没问题。
-艾玛-乐器: [echo] 从/blabla/project/tests/instrumented/classes 检测类...
因此,有一个包含 98 个类的元数据的 *.em 文件。
3) 一些标准的android转换为dex,打包为unaligned,zip align。结果是/blabla/project/tests/instrumented/project-debug.apk。
4) 将此项目-debug.apk 安装到模拟器上。
5) 编译测试项目。 编译: [javac]/blabla/android-sdk/android-sdk-linux_x86/tools/ant/main_rules.xml:384: 警告:'includeantruntime' 未设置,默认为 build.sysclasspath=last;为可重复build设置为 false [javac] 编译110个源文件到/blabla/project/tests/bin/classes
源文件包括所有以前的文件加上测试(110 = 88 + 测试),如 build.properties 中所述(多个 source.dir 以“;”分隔)。
6) Resources, Dex, signing, zip align... 结果是projectTest-debug.apk
7) 将 projectTest-debug.apk 安装到模拟器上。
8) 通过指定“覆盖率”的 am 运行测试。它告诉我们
[exec] Generated code coverage data to /data/data/blabla.project/files/coverage.ec
9) 此 coverage.ec 不包含相关数据。它有 37 个字节长。报道称
processing input file [/home/ubuntu/projects/ppf2/workspace/PPF2/tests/coverage.ec] ...
loaded 0 coverage data entries
...
no collected coverage data found in any of the data files [all reports will be empty]
除了最后一步,一切对我来说似乎都很好。
最佳答案
我遇到了同样的问题,我想我明白这里发生了什么。
我看起来被测包的源也在测试包的内部(或被引用为源)。
结果是如果你 opened them up 你的包 apks 看起来像下面这样:
PackageUnderTest/ClassFileUnderTest
TestPackage/TestClass
TestPackage/ClassFileUnderTest
被测类文件:
pluclic class ClassFileUnderTest{
public int foo(){
...
}
}
测试类:
pluclic class TestClass{
public void testFoo(){
int result = foo();
assert...
}
}
这里发生的事情是,每当您的 TestClass 从 testFoo() 调用 foo() 方法时,foo() 就会在 TestClass/ClassFileUnderTest 而不是 PackageUnderTest/ClassFileUnderTest 上被调用。
因此,仪表化的 PackageUnderTest/ClassFileUnderTest 从未运行,也没有在覆盖率报告中记录。
从 TestPackage 中删除引用 PackageUnderTest 代码强制 PackageUnderTest 代码从 PackageUnderTest 运行并计入覆盖率报告。
关于android - Emma 报告覆盖率为 0%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6223572/
我得到了 Error: Failed to generate emma coverage. Is emma jar on classpath? 在为 android 测试项目生成覆盖率报告时,我正在使
我有一个 Ant 构建文件,我在其中编译应用程序和测试的 Java 源代码、检测应用程序类、运行 JUnit 测试并生成 JUnit 和 Emma 代码覆盖率报告。 JUnit 任务被赋予了检测类的路
我已经在android模拟器中创建了coverage.ec文件,可以查看文件,但是无法读取内容。据我所知,只有在生成coverage.html文件后,我们才能看到覆盖率。为了生成这个,我经历了 Bui
嗨,我想使用 maven 生成 emma 报告。当我尝试构建报告时,它会出现此错误。 [ERROR] Failed to execute goal org.codehaus.mojo:emma-mav
我想知道你们中的 EMMA 用户是否遇到过这个问题。 基本上我有多个项目,每个项目都有不同的 build.xml ANT 脚本,这些脚本都是从一个主 ANT 脚本中单独调用的。代码已被适当覆盖,但当
我对 EMMA 有一个问题,它正确地覆盖了我所有的各种 Java 项目,除了一个。我很困惑为什么会出现这种情况,因为 ANT 脚本似乎是正确的。给出以下预期输出: [echo] c:\cc_loca
关于 EMMA 的工作..想知道 EMMA 如何标记与源代码相关的代码行。有没有办法只提取覆盖/标记的线? 最佳答案 EMMA 对类文件进行检测,检测代码(附加字节代码)用于生成 coverage r
在生成 HTML 覆盖率报告时,在哪里可以找到 Emma 用于突出显示源代码的默认颜色的图例? 最佳答案 Annotations 绿色代表完全覆盖的线,黄色代表部分覆盖的线和红色表示根本没有执行的行。
我正在使用 EMMA 工具进行代码覆盖,尽管我已尽最大努力,但 EMMA 拒绝查看原始 .java 文件并逐行生成覆盖。 我们正在使用 ANT 构建代码并将调试设置为 true。我知道 EMMA 正在
上周我下载了 Flash tool ,由 Sony 提供,来自开发者世界网站,安装后将自己注册为新用户。 但是,我的帐户似乎没有得到验证。我没有收到任何电子邮件说他们无法验证我的帐户,也没有收到任何电
对于涉及部署在单个应用服务器中的两个或多个 Web 应用程序的系统,是否有任何方法可以获得系统测试覆盖率结果? 最佳答案 我对 cobertura 和 jboss 做了类似的事情。您应该只“检测”所有
有没有办法为 EMMA 生成自定义报告。我想要做的是创建一个 html 报告,将 java 包 View 分组到功能组件区域中,以便我可以看到由功能组件而不是包驱动的报告。 例如说我有 功能Acom.
在被测 Android Activity 中抛出未捕获的异常时,不会生成 Emma 代码覆盖率。但是,如果测试通过,则覆盖成功生成!我正在使用 SDK r15、Emma 1.6.x macosx 和默
java.lang.VerifyError: Expecting a stackmap frame at branch target 11 in method tests.FieldTest.()V
我安装了 Java SE Development Kit 7u3 我已经完成了一些与此类似的主题(例如 "java" succeeds," java emmarun" fails),但我的问题是 EM
在 Java 中使用枚举可以保证对象实例的唯一性,如下所示: public enum EmmaTest { ; public static int someStaticMethod()
我想在运行单元测试时获得代码覆盖率。我跑 ant coverage使用标准的 android build.xml 进行测试。 测试运行良好。来自 ant coverage 的最后一个字符串是 Test
我正在运行 EclEmma,它是 Eclipse 的 Emma 插件,覆盖率报告仅显示我定义的 Enum 的部分覆盖率,即使它显示 Enum 中唯一的值被覆盖。我假设支持 Enum 的隐含方法存在覆盖
我有一个奇怪的场景......在为 UT 进行 EMMA 覆盖时,我得到的总 block 覆盖大小超过了线路覆盖大小。 对于 block 覆盖,总大小约为 50,000,而线路覆盖则为 18,000。
我得到了 emma 为我的 Java 代码报告的几乎 100% 的覆盖率,除了一个类中的一大块行(没有突出显示,只有类本身被突出显示)。 有问题的“方法”被列为: $SWITCH_TABLE$com$
我是一名优秀的程序员,十分优秀!