- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个带有 Java 代码的多模块 Maven 设置。
我的单元测试,在一个模块中,在多个模块中练习代码。自然地,模块具有相互依赖性,所有相关模块中的代码在测试执行之前根据需要进行编译。
那么:我怎样才能得到一份关于整个代码库覆盖率的报告?
注意:我不是在问如何合并多个模块中测试的覆盖率结果。我在问如何使用来自多个模块的检测代码来覆盖单个模块中的测试。对前者感兴趣的可以引用these other questions ,以及 Crowne 对 Maven Dashboard 的建议和 Sonar .
我成功获得了全覆盖报告using pure Ant . [编辑:]我将 development-runtime 目录中的所有 jar 文件检测到一个临时目录中;将临时目录添加到类路径中;然后使用 batch-test 从 Ant 运行测试。
Ant 可以从 Maven 运行,但这里的挑战是无缝集成(即自动将所有类路径和源路径元素从 Maven 提供给 Ant),这就是为什么我没有为此目的使用 Maven 的工具。
还有other questions关于集成测试。但是,默认情况下,每个项目的报告默认仅报告相同项目中代码的覆盖率,而我的测试在多个项目中执行代码。
这article in Spanish可能是相关的。这是另一个 Seam-specific article .
最佳答案
这recent blog post by Thomas Sundberg包含一种通过使用 ant 进行 cobertura 调用而不是使用 maven cobertura 插件来部分解决问题的方法。
它依赖于以下使用专门的 pom.xml 和 build.xml 文件的基本方法:
从父 pom 上的典型 maven 编译开始,它将编译子模块中的所有类。
mvn clean compile # maven-compile-plugin called for compiling
然后检测所有模块类:
ant instrument # cobertura called for instrumentation
然后调用 maven-surefire-plugin 调用以使用检测类进行测试,并将 cobertura 作为测试依赖项
mvn test
然后使用自定义报告调用从不同模块中提取所有结果:
ant report # cobertura called for reporting
ant build.xml 文件的关键元素是分别检测所有模块,然后在合并结果后报告所有模块。在他的示例中,每个模块都需要调用此函数:
<target name="instrumentAModule">
<property name="classes.dir" value="target/classes"/>
<cobertura-instrument todir="./${module}/${classes.dir}">
<fileset dir="./${module}/target/classes">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>
</target>
然后在测试完成后,报告阶段首先将来自所有不同目录的所有结果合并到一个新的 .ser 文件中(在他的示例中称为 sum.ser)
<target name="report" depends="merge">
<property name="src.dir" value="src/main/java/"/>
<cobertura-report datafile="sum.ser"
format="html"
destdir="./target/report">
<!-- Add all modules that should be included below -->
<!-- fileset dir="./MODULE_NAME_TO_REPLACE/${src.dir}"/ -->
<fileset dir="./product/${src.dir}"/>
</cobertura-report>
</target>
<target name="merge">
<cobertura-merge datafile="sum.ser">
<fileset dir=".">
<include name="**/cobertura.ser"/>
</fileset>
</cobertura-merge>
</target>
也许可以使用 antrun 插件将 ant 组件集成到 maven 中,但我对阶段/生命周期不够熟悉,不知道将不同的调用放在哪里。
这对我来说非常有用,因为我在我的 api 模块中编写抽象测试类,然后在我的 lib 模块中为它们提供一个实现。到目前为止,cobertura 和 emma 都无法处理此设计,因此我的代码覆盖率通常为 0 或个位数。
关于java - 我如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717846/
在旧版 Web 应用程序中,我们没有对 javascript 部分进行任何单元测试。 我们希望提高代码质量并删除死代码。 有什么方法可以在人工测试期间在浏览器中进行逐行 Javascript 代码覆盖
我已经为我的 python 代码编写了测试,并且想检查测试覆盖了多少百分比,所以我决定使用 python 覆盖。但是我启动它时遇到问题。我用这个 bash 命令启动我的测试: export PYTHO
我正在使用 python 覆盖工具来运行我的单元测试。从结果中可以看出,它包括所有“站点包”。我怎样才能将它们排除在报告之外?我只想显示项目源代码的报告。 (ctrp) ubuntu@ubuntu-x
我正在尝试使用 Opencover 来运行 NUnit 测试用例的代码覆盖率。我得到了预期的结果,但问题是在执行 opencover 时它再次运行测试。我们不希望发生这种情况,因为我们单独运行测试。下
我正在尝试使用 Opencover 来运行 NUnit 测试用例的代码覆盖率。我得到了预期的结果,但问题是在执行 opencover 时它再次运行测试。我们不希望发生这种情况,因为我们单独运行测试。下
我有一个 python 项目,我使用: pipenv 毒性 pytest 还有更多。 基本上,我想将 tox 添加到我的 gitlab 管道中。几乎一切似乎都有效,从 tox 调用 mypy、flak
我使用Coverity来分析代码C。 配置命令: cov-configure --compiler /opt/toolchains/stbgcc-4.5.4-2.9/bin/mipsel-linux-
是否可以在运行时测量 python 代码覆盖率并在生成结果时查看结果?我尝试使用 coverage但找不到有帮助的选项。我最初的实验表明,.coverage 文件直到程序执行结束才被保存,这意味着我们
我有一个文件,test_basic.py: class TestCalculator(): def test_calculator(self): from basic impo
我有一个小型 PHP 项目,它使用 PHPUnit 进行单元测试和覆盖。我想生成 cobertura XML 格式的覆盖率报告。 我可以使用任何工具或插件来实现这一目标吗? 感谢任何帮助.. 最佳答案
我正在研究一个小 gem 并包含 simplecov到 spec_helper.rb 两行: require 'simplecov' SimpleCov.start 当我运行 rspec 测试时,si
go -cover 或 -coverprofile 在运行 go 测试时非常有用,并且可以在 html 或纯文本中很好地显示。但是是否有 api 以编程方式访问它或处理文件? 最佳答案 你可以试试ax
当我遇到代码覆盖问题时,我目前开始在 PHPUnit 中使用 strict 模式: 如果我使用setUp-方法创建我的类的新实例,__constructor-方法在我运行测试。 这是我的测试设置: p
我正在运行 EclEmma,它是 Eclipse 的 Emma 插件,覆盖率报告仅显示我定义的 Enum 的部分覆盖率,即使它显示 Enum 中唯一的值被覆盖。我假设支持 Enum 的隐含方法存在覆盖
我正在将 ANT 构建转换为 Maven。我不使用声纳。 在 Maven 中,Jacoco 似乎没有报告有关单元测试本身的覆盖率,而 ANT 则报告了。我也一直在尝试为我的 Maven 构建获取这个,
我正在努力为我正在处理的库实现 100% 的代码覆盖率,但我似乎对 switch 语句和覆盖率有一些问题,我根本不明白。 我目前使用的是 Jacoco 0.7.2,因为每个新版本似乎都与 Robole
有没有在intelliJ中不用浏览器运行代码覆盖率的方法? http://www.jetbrains.com/webstorm/webhelp/monitoring-code-coverage-for
我想确保我的 Django 测试套件涵盖我的 URL 配置中列出的所有 URL。有没有办法将 URL 配置中的列表与测试套件中命中的 URL 列表进行比较? 最佳答案 我能够通过定义自定义测试套件运行
哇,好乱啊。这是场景。 主干驱动的 JS 应用。 用于 AMD 功能的 RequireJS,初始化如下: 然后在 main.js 中添加以下配置代码: require.config( { p
我的问题很简单,但答案仍然难以捉摸。假设我有一个包裹 package mypackage func DoTheThing() int { return 5 } 现在假设我在 mypackage_t
我是一名优秀的程序员,十分优秀!