我们有部署在应用程序的JBoss 5.1, JDK 1.6。 我们也有写脚本PowerShell中进行测试。 这些脚本使用Web服务应用程序。 我想检查脚本的代码覆盖率。 有任何想法吗? 大多数的工具,我看到的是检查的JUnit测试覆盖率,我看不出我们如何使用它们。
Answer 1:
据我所知,所有的代码覆盖工具使用相同的概念(我将省略报告和检查部分):
- 首先仪器的代码(即位置标记)。
- 然后运行测试,以执行所改动的代码(激活标记和收集数据)。
对于第二个步骤中,常见的情况是确实运行JUnit测试,但你的测试不必是JUnit测试。 事实上,他们甚至没有自动化。
而改动的代码没有在单元测试的情况下被执行,它可以被封装在一个WAR / EAR并部署了容器上(这将只是需要更多的工作)。
对于的Cobertura,这就是我们可以在阅读常见问题 :
使用的Cobertura与Web应用程序
我已经自动使用HttpUnit的/的HtmlUnit / Empirix公司/ Rational Robot的测试,我可以使用的Cobertura?
是! 这个过程是多一点参与,但概念是相同的。 首先仪编译后的类。 然后创建你的战争文件。 那么战争文件部署到应用服务器(Tomcat的,JBoss的,的WebLogic,WebSphere中)。 现在运行测试。
当你的类访问,他们将在磁盘上创建一个“cobertura.ser”文件。 您可能需要周围挖了一下,找到它。 的Cobertura把这个文件在什么它认为是当前工作目录。 通常,这是应用程序服务器是从(例如C:\ Tomcat的\ BIN)开始的目录注意: 此文件未写入磁盘,直到应用程序服务器退出。 请参阅下面如何来解决这个问题。
现在,你知道在哪里cobertura.ser文件,你应该修改你的部署步骤,使得它移动原cobertura.ser到相应的目录在你的应用服务器,然后在完成测试时移回。 然后运行的Cobertura报告。
[...]
对于艾玛,这是什么文件说:
3.11。 如何使用EMMA在{的WebLogic,WebSphere中,Tomcat的,JBoss的,...}?
首先,很少有机会,你将能够以一个成熟的J2EE容器使用的即时模式(emmarun)。 究其原因就在于,许多J2EE功能需要专门的类加载器会发生EMMA插装的类加载器之外。 服务器可能运行良好,但你可能会得到不覆盖数据。
因此,正确的方法是检测你自己的班级在部署之前(离线模式)。 离线仪器始终遵循相同的编译/仪器/包/部署/获取覆盖/生成报告序列。 跟着这些步骤:
- 使用EMMA的INSTR工具,仪器所需的类。 这可以作为一个编译后步骤,包装前。 然而,许多用户也发现可以方便地直接让EMMA进程中的罐子(无论是在地方,使用覆盖模式,或者通过创造一切的独立仪表副本,在fullcopy模式);
- 做你的J2EE包装为正常,但不包括emma.jar因为在这个水平上一个lib,那就是你的.war内的.ear等;
- 定位取其JRE用于由容器和复制emma.jar到其/ lib / ext目录。 如果这是不可能的,添加emma.jar到服务器类路径(在特定的服务器的方式);
- 部署仪表类,.jar文件,.wars,.ears等和锻炼/测试J2EE通过您的客户端的测试用例或交互方式或任何方式,你做的应用;
- 得到一个覆盖转储文件,你所描述的三个选项方面有哪些办法可以控制何时EMMA转储运行的覆盖数据? 强烈建议您使用coverage.get控制命令在V2.1中可用的CTL工具。
三叶草,检查与分布式应用程序的工作页面。
Answer 2:
我用爱玛单元测试项目的构建阶段综合覆盖工具,但工具的文件说 ,这是相当简单的你所描述的情况来获得代码覆盖率。
Answer 3:
我建议jacoco ,因为它并不需要修改源代码。 看看在(Tomcat)的Java应用程序与GreyBox线束测量代码覆盖率
Answer 4:
代码覆盖是一个伟大的工具。 对于你的情况,你应该使用命令行界面 ,这可能与你现有的PowerShell脚本结合。