我正在尝试找出用于获取以稳定环境运行的项目的代码覆盖率信息的工具。 这些项目被部署为战争并在Jboss上运行。在运行与正在运行的服务器交互的手动/自动化测试时,我需要服务器端覆盖。 让我们假设我不能更改项目的构建,因此作为构建过程的一部分,不能将任何类型的工具添加到他们的jar中。我也无法访问代码。
我已经对各种工具进行了一些阅读,他们都提出了涉及在构建上检测罐子的技术(BTW - 不影响生产,还是生成两种输出?) 但是,JaCoCo的一个工具提到了“实时仪表”功能。有人可以解释这是什么意思吗?这可以帮助我解决我的局限吗? 我也听说过使用运行时分析技术进行代码覆盖 - 有人可以帮助解决这个问题吗?
谢谢, 本
答案 0 :(得分:4)
AFAIK“on-the-fly-instrumentation”意味着coveragetool通过使用特殊的ClassLoader挂钩到Classloading-Mechanism,并在加载时编辑Class-Bytecode。 结果应与使用JAR的“离线检测”相同。
还要看一下EMMA,它支持这两种机制。还有Plugin for Eclipse。
答案 1 :(得分:3)
在没有实际代码检测的情况下解决此问题的可能方法是使用jvm c-agent。可以将代理程序附加到jvm。在这样的代理中,您可以拦截在java代码中完成的每个方法调用,而无需更改字节码。
在每个截获的方法调用中,您都会编写有关方法调用的信息,以后可以为代码覆盖率进行评估。
在这里,您将找到JVMTI JVMTI的官方指南,该指南定义了如何编写jvm代理。
答案 2 :(得分:2)
您无需更改构建版本,甚至无需访问代码来修改类。只需检测交付罐中的类,重新装罐,然后使用装有仪器的罐重新部署应用程序。
Cobertura甚至有一个蚂蚁任务为你做到这一点:它需要一个战争文件,在战争中的罐子内部检测类,并重建一个新的war文件。见https://github.com/cobertura/cobertura/wiki/Ant-Task-Reference
回答关于在构建中检测罐子的问题:是的,当然,检测类不用于生产。它们仅用于测试。