2013-03-03 1 views
3

Да, это еще один из тех вещей, которые покрывают 0%. Я проверил и подтвердил следующее:Cobertura сообщает о покрытии 0%, несмотря на удовлетворение требований к работе

1) ... что программа действительно генерирует соответствующий файл cobertura.ser и что этот файл и содержимое инструментального каталога исчезли, согласно http://cobertura.sourceforge.net/faq.html.

2) ... что «приборный» - это первый путь класса, идентифицированный в тесте Cobertura.

3) ... что линии действительно испытываются в моем наборе тестов, и ...

4) ... что «инструментальный» каталог действительно создаются и записывается - I смотрел, как это происходит.

Что странно, что я заметил, что в докладе, что Ant создает ничего, кроме серии сообщений, которые читают:

Testcase: pluralizeIt[0] took 0.004 sec 
    Caused an ERROR 
Instruction type does not match stack map in method StringUtil.main([Ljava/lang/String;)V at offset 50 
java.lang.VerifyError: Instruction type does not match stack map in method StringUtil.main([Ljava/lang/String;)V at offset 50 
    at PluralTest.pluralizeIt(PluralTest.java:55) 

Но если я закомментируйте все ссылки и целевые Cobertura, тест работает нормально, и отчет Ant дает мне 100% то, что я ожидаю с точки зрения успехов и неудач.

Мой файл build.xml находится ниже ... любых мыслей ??? Спасибо ....

<?xml version="1.0" encoding="UTF-8"?> 
<project name="TestPlurazliation" default="coverage" basedir="."> 
    <property name="src" location="src" /> 
    <property name="build" location="bin" /> 
    <property name="cobertura" location="/Users/Dauber/Desktop/cobertura-1.9.4.1" /> 
    <property name="instrumented" location="instrumented" /> 
    <property name="coverage.xml" location="coverage-xml" /> 
    <property name="coverage.html" location="coverage-html" /> 
    <path id="cobertura.classpath"> 
     <fileset dir="${cobertura}"> 
      <include name="cobertura.jar" /> 
      <include name="lib/**/*.jar" /> 
     </fileset> 
    </path> 

    <taskdef classpathref="cobertura.classpath" resource="tasks.properties" /> 

    <target name="init"> 
     <tstamp /> 
     <mkdir dir="${build}" /> 
    </target> 

    <target name="compile" depends="init"> 
     <javac srcdir="/Volumes/Junk/Java projects/SE433/TestingPluralization/src" includeantruntime="false" debug="on" destdir="${build}"> 
      <classpath location="/Users/Dauber/Desktop/junit-4.10.jar" /> 
     </javac> 
    </target> 

    <target name="PluralizationTest" depends="compile"> 
     <junit printsummary="yes" fork="yes" haltonfailure="yes"> 
      <classpath location="/Users/Dauber/Desktop/junit-4.10.jar" /> 
      <classpath location="${build}" /> 
      <formatter type="plain" /> 
      <test name="PluralTest" /> 
     </junit> 
    </target> 

    <target name="instrument" depends="init,compile"> 
     <delete file="cobertura.ser" /> 
     <delete dir="${instrumented}" /> 
     <cobertura-instrument todir="${instrumented}"> 
      <ignore regex="org.apache.log4j.*" /> 
      <fileset dir="bin"> 
       <include name="**/*.class" /> 
       <exclude name="**/*Test*.class" /> 
      </fileset> 
     </cobertura-instrument> 
    </target> 

    <target name="PluralizationTest2" depends="init,compile"> 
     <junit fork="yes"> 
      <classpath location="${instrumented}" /> 
      <classpath location="${build}" /> 
      <classpath location="/Users/Dauber/Desktop/junit-4.10.jar" /> 
      <classpath refid="cobertura.classpath" /> 
      <formatter type="plain" /> 
      <test name="PluralTest" /> 
     </junit> 
    </target> 

    <target name="coverage-report-xml"> 
     <cobertura-report srcdir="${src}" destdir="${coverage.xml}" format="xml" /> 
    </target> 

    <target name="coverage-report-html"> 
     <cobertura-report srcdir="${src}" destdir="${coverage.html}"/> 
    </target> 

    <target name="coverage" depends="compile,instrument,PluralizationTest2,coverage-report-xml,coverage-report-html" /> 

    <target name="clean" description="clean up" > 
     <delete dir="${build}"/> 
     <delete dir="${instrumented}"/> 
    </target> 

</project> 
+0

Вы используете java 7? Работает ли cobertura с jdk7? – Jayan

+0

Я использую JDK 7. Я не знал, что это будет проблемой, но теперь, когда вы упомянули об этом, поиск по поиску показывает, что это может быть огромная проблема ... – ScatteredFrog

+0

@ ScatteredFrog: Вы сделали больше исследований? Любое нахождение? – Jayan

ответ

5

Если вы используете JDK 7, необходимо добавить аргумент UseSplitVerifier JVM:

<jvmarg value="-XX:-UseSplitVerifier"/> 

(Примечание: Я добавляю это как ответ от комментариев поэтому другие могут легко найти решение.)

+0

[Эта опция недоступна (или нужна) в Java 8] (http://stackoverflow.com/a/31569447/2074605): «Предупреждение VM на 64-битном сервере Java HotSpot ™ TM: игнорирование опции UseSplitVerifier; поддержка была удалена в 8.0'. – vallismortis

Смежные вопросы