运行 jacoco 报表,其中集成测试位于一个代码库中,源代码位于另一个代码库中



我最近开始为maven项目创建jacoco报告,包括单元和集成测试,它们似乎工作正常。 现在我遇到了一个不同的场景,我不知道如何处理。 我有一个由集成测试用例组成的工作区 - 应用程序 A,但源代码不存在于同一个工作区/代码库中。在调用这些集成测试脚本时实际运行的源代码位于不同的工作区/代码库中 - 应用程序 B(它们使用带有本地主机 url 的 rest api 调用来调用。为应用程序 B 启动 jboss 服务器,以便从集成测试中启动本地主机上下文。 目的是从应用程序 A 调用这些集成测试,而应用程序 A 又调用应用程序 B 中这些测试的源代码,生成应用程序 B 的代码覆盖率的 jacoco 报告。 我实际上不确定如何实现这一目标。 有人可以提供一些意见吗?

谢谢。

如果我理解正确,您的方案中实际上有 2 个不同的过程:

  • 运行集成测试的"客户端"过程,可以轻松应用 jacoco,但这不是您所需要的

  • 运行实际 JBoss 服务器并执行实际代码的"服务器"进程。

客户端进程通过 HTTP 与服务器联系。

在这种情况下,如果您从 maven/gradle 运行测试,恐怕 jacoco 将无法为您提供覆盖范围,因为 jacoco 只在正在运行的 JVM 上检测字节码。所以你必须在这里"有创造力":)

我将在这里列出一些可能的方法免責聲明:我还没有尝试过它们(不适用于jboss/java ee(,但也许你至少可以借用一些想法

第一种方法是以某种方式将测试与应用程序一起运行,就像在春季测试中所做的那样(我不确定 JBoss 是否提供类似的功能(。

这个想法很简单:

  • 你运行集成测试,它运行"嵌入在同一个jvm中"的jboss,你可以将bean/EJB会话bean注入测试中(就像使用spring自动布线一样(。

这种方法的优点是,您只需使用jacoco maven插件,它将为您检测所有内容

我不知道在技术上实现这种架构有多容易,我知道最近的jboss版本支持嵌入式模式,所以也许你会发现这个链接是一个有用的基础

另一个方向是看看Arquillian项目。他们有一些jacoco扩展可能会有所帮助,但我从未尝试过。

我能想到的最后一种方法是直接使用 jacoco 代理运行 jboss 服务器,而不是依赖为您运行 jacoco 的构建系统。

这里的想法是将覆盖的服务器代码的结果流式传输到某个文件/tcp端点中。因此,您可以使用-javaagent:[yourpath/]jacocoagent.jar运行 jboss,它开始将结果流式传输到您需要流式传输的任何位置。测试后,您应该收集这些结果并准备一份报告。您可以在此处找到有关此方法的更多信息

相关内容

最新更新