使用Cobertura进行Junit测试部署在WebSphere Liberty Profile

时间:2015-06-11 01:54:19

标签: junit websphere cobertura websphere-liberty

我一直在尝试使用Cobertura和Junit为我的Web应用程序生成代码覆盖率,但遇到了问题。我的webapp是部署在WebSphere Liberty Profile上的Java Web应用程序。我已按照此处提到的步骤进行操作:https://github.com/cobertura/cobertura/wiki/FAQ#using-cobertura-with-a-web-application

我的步骤如下:

  1. 使用cobertura-instrument ant任务的乐器类。
  2. 将cobertura.jar放入我的webapp的lib文件夹中(以便它在类路径上)
  3. 启动Liberty
  4. 运行Junits(JUnit在Liberty JVM以外的单独JVM中运行)
  5. 问题是,当我停止自由时,不会生成cobertura.ser文件。我试过" hack"这里提到: https://github.com/cobertura/cobertura/wiki/FAQ#using-cobertura-with-a-web-application

    它似乎工作(我实际上有一些覆盖信息),但我看到cobertura.ser文件被反复初始化为零大小,然后大小增加到一些数字,所以我有点犹豫使用这个。而且,这需要改变代码本身,并且取决于被调用的注销代码,这对于自动化来说并不是很理想。

    但我对Websphere Liberty的设置更感兴趣,例如为JBoss描述的设置

    -Djboss.shutdown.forceHalt=false 
    

    特别是,一个允许Cobertura检测Liberty配置文件调用的JVM关闭挂钩的jvm设置。是否有这样的WebSphere / Liberty设置?

1 个答案:

答案 0 :(得分:1)

自由配置文件并不会调用Runtime.halt所以应该适当地调用所有关闭挂钩。我想我会重新看一下,我想我设法让它工作(我说我想是因为没有一个命令行脚本工作所以我可能仍然做错了)

  1. 写了一个简单的servlet战争
  2. 下载了cobertura并将cobertura-2.1.1.jar和所有jar文件夹下载到我的战争的WEB-INF / lib中
  3. 运行java InstrumentMain类来检测WEB-INF / classes中的类(选择覆盖它们)
  4. 启动服务器
  5. 访问该应用程序
  6. 关闭服务器
  7. 最后我查看了WEB-INF / classes,并且有一个1480字节的cobertura.ser文件(即非零。)。当我运行报告工具时,它说我没有覆盖,所以我删除了文件并返回重现。 WEB-INF / classes中的cobertura.ser文件尚未生成。相反,我查看了服务器工作目录(如果它在那里)而且它不是。当我为此生成报告时,我得到了报道。

    所以可以寻找一些可能的东西:

    1. 这是你要找的corbertura.ser吗?查看usr / servers /文件夹以查看是否存在。
    2. 在非应用程序之前或之后,已检测的类最终是否在应用程序中
    3. cobertura依赖项是否可用。