2013-06-27 70 views
1

我刚刚开始将Cobertura集成到我们主要产品的构建过程中,该过程使用Ivy作为依赖项管理工具。有几个库lib-a,lib-blib-c没有测试用例和一个依赖于这些库的项目,并包含所有这些库的单元和集成测试。如何让Cobertura和Ivy一起工作?

一般来说,仪表,运行仪表测试和生成Cobertura报告都有效。但是,有几个问题:

  • 在仪器仪表,有几个警告(约10)报道:

    Problems instrumenting archive entry: a.b.c.MyClassFoo java.lang.RuntimeException: java.lang.ClassNotFoundException: a.b.c.MyClassBar

    然而,报道类exisiting。在仪器的结束,它报告

    Saved information on 364 classes

  • 当查看报告,它显示了所有的类,但依赖库的所有类都报告为0%的覆盖率。
  • 查看详细信息时,它会报告找不到任何来源。

现在我想问题可能是,是的Cobertura与 问题 - 插装的JAR文件和 提供的类文件 - 获取源从jar文件

该仪器ant任务在我的构建。 XML执行以下操作:

<cobertura-instrument todir="${build.dir}/instrumented-classes"> 
     <includeClasses regex="com\.mycompany.*" /> 
     <instrumentationClasspath> 
      <path refid="default.test.classpath" /> 
      <pathelement location="${build.classes.dir}" /> 
     </instrumentationClasspath>  
    </cobertura-instrument> 

如果这是足够了吗?

林不知道,因为报告的警告。所有报道的课程都可以在罐子里找到。

对于第二个问题,我甚至不知道如何提供来源罐子的Cobertura报告...

我试图

<cobertura-report destdir="${build.dir}/coverage"> 
    <fileset dir="${src.dir}"> 
     <include name="**/*.java" /> 
    </fileset> 
    <ivy:cachefileset conf="runtime-test" type="sources"/> 
</cobertura-report> 

,但它说的是不支持cachefileset。我也尝试使用pathid,我也不能在cobertura-report中提供。 我是否必须先解压所有来源(这将非常耗时),然后将它们作为正常的fileset提供?

回答

1

好吧,重构我的Cobertura Ant任务时,我能够解决报告为0%覆盖率的依赖类的问题。

起初,我的测试任务包含以下内容:

<junit printsummary="yes" haltonfailure="no"> 
     <classpath> 
      <pathelement path="${build.test.classes.dir}"/> 
      <pathelement path="${build.dir}/instrumented-classes"/>   
      <pathelement path="${build.classes.dir}"/> 
      <path refid="default.test.classpath"/> 
      <path refid="cobertura.classpath"/> 
     </classpath> 
     (...) 
    </junit> 

的问题是,该仪器装备常春藤导致jar文件的${build.dir}/instrumented-classes目录中提供的jar文件。但是,pathelement据说只能查找类文件。所以我增加了一个fileset以包括仪器化的罐子:

<junit printsummary="yes" haltonfailure="no"> 
     <classpath> 
      <pathelement path="${build.test.classes.dir}"/> 
      <pathelement path="${build.dir}/instrumented-classes"/> 
      <fileset dir="${build.dir}/instrumented-classes"> 
       <include name="*.jar" /> 
      </fileset>    
      <pathelement path="${build.classes.dir}"/> 
      <path refid="default.test.classpath"/> 
      <path refid="cobertura.classpath"/> 
     </classpath> 
     (...) 
    </junit> 

其他问题仍然存在。