2010-02-23 5 views
1

Я следующий сценарий:Как изменить сценарий Ant с покрытием кода EMMA, чтобы он мог найти данные покрытия времени выполнения?

<?xml version="1.0" encoding="UTF-8"?> 

<taskdef resource="emma_ant.properties"> 
    <classpath>    
     <pathelement location="lib/emma.jar" /> 
     <pathelement location="lib/emma_ant.jar" /> 
    </classpath> 
</taskdef> 

<target name="compile"> 
    <mkdir dir="build"/> <!-- vytvori adresar build --> 
    <mkdir dir="build/classes"/> 
    <mkdir dir="build/test"/> 
    <javac destdir="build/classes" srcdir="src" debug="true" /> <!-- prelozi zdrojove kody --> 
    <javac destdir="build/test" srcdir="test"> <!-- prelozi testy --> 
     <classpath> <!-- pro prelozeni testu je potreba junit a prelozena aplikace --> 
      <pathelement location="lib/junit-4.5.jar" /> 
      <pathelement location="build/classes" /> 
     </classpath> 
    </javac> 
</target> 

<target name="build" depends="compile"> 
    <jar destfile="tetris.jar" basedir="build/classes"> <!-- zabali aplikaci do jaru --> 
     <manifest> 
      <attribute name="Main-Class" value="tetris.Main"/> 
      <attribute name="Class-Path" value="lib/mysql-connector-java-5.1.6-bin.jar lib/derbyclient.jar"/> 
     </manifest> 
    </jar> 
</target> 

<target name="jar" depends="build"></target> 

<target name="run" depends="compile"> 
    <java classname="tetris.Main" classpath="build/classes"> <!-- spusti aplikaci --> 
     <classpath> 
      <pathelement location="lib/mysql-connector-java-5.1.6-bin.jar" /> 
      <pathelement location="lib/derbyclient.jar" /> 
     </classpath> 
    </java> 
</target> 

<target name="instrument" depends="compile"> 
    <mkdir dir="build/instrumented"/> 

    <emma verbosity="verbose"> <!-- vytvori tridy upravene pro sledovani coverage --> 
     <instr instrpath="build/classes" 
       destdir="build/instrumented" 
       metadatafile="build/metadata.emma" 
       merge="true" /> 
    </emma> 
</target> 

<target name="test" depends="instrument"> 
    <mkdir dir="reports" /> 
    <mkdir dir="reports/junit" /> 

    <junit printsummary="yes" haltonfailure="no" fork="true"> <!-- pusti JUnit testy --> 
     <classpath> 
      <pathelement location="build/test" /> 
      <pathelement location="build/classes" /> 
      <pathelement location="build/instrumented" /> 
      <pathelement location="lib/junit-4.5.jar" /> 
      <pathelement location="lib/emma.jar" /> 
      <pathelement location="lib/emma_ant.jar" /> 
     </classpath> 

     <formatter usefile="false" type="brief" /> 
     <formatter type="plain"/> 

     <batchtest fork="yes" todir="reports/junit"> <!-- reporty budou v adresari reports/junit --> 
      <fileset dir="test"> 
       <include name="**/TetrisSuite.java"/> 
      </fileset> 
     </batchtest> 
     <jvmarg value="-Demma.coverage.out.file=build/coverage.emma"/> 
     <jvmarg value="-Demma.coverage.out.merge=true" /> 
    </junit> 

    <emma enabled="true" verbosity="verbose"> <!-- vygeneruje report emmy --> 
     <report sourcepath="src"> 
      <fileset dir="build" includes="*.emma" /> 

      <html outfile="reports/coverage.html" /> 
     </report> 
    </emma> 
</target> 

<target name="clean"> 
    <delete dir="build"/> <!-- smaze adresar build --> 
    <delete dir="reports"/> 
    <delete file="tetris.jar"/> 
</target> 

Он выводит это сообщение:

processing input file [...NetBeansProjects/Tetris3/build/metadata.emma] ... 
    loaded 25 metadata entries 
1 file(s) read and merged in 5 ms 
nothing to do: no runtime coverage data found in any of the data files 

Что случилось и как это исправить?

+0

@Corvus - Я добавил еще несколько мыслей - может быть, что вы ничего не запускали, например, если нет тестов junit под названием TetrisSuite. –

ответ

3

Похоже, вы собираете неинструментальные классы.

Может быть, потому что classpath в вашей junit задачи имеет скомпилированные классы (build/classes) вперед из инструментированных (build/instrumented). Может быть, изменить их в этом классе?

EDIT

Я скачал Эммой и настроить базовый проект с одним исходным классом и один тестовый класс. Я попытался запустить его, используя сборку, предоставленную в вопросе. Единственное изменение, которое я сделал, это обернуть тело в <project> с test в качестве цели по умолчанию. При запуске я получил аналогичное сообщение в вопросе:

[report] processing input file [/Users/mjc/stack_overflow/emma/build/metadata.emma] ... 
[report] loaded 1 metadata entries 
[report] 1 file(s) read and merged in 6 ms 
[report] nothing to do: no runtime coverage data found in any of the data files 

Я тогда установить JUnit классов поставить инструментальные классы впереди ваниль:

<classpath> 
    <pathelement location="build/test" /> 
    <pathelement location="build/instrumented" /> 
    <pathelement location="build/classes" /> 
    <pathelement location="lib/junit.jar" /> 
    <pathelement location="lib/emma.jar" /> 
    <pathelement location="lib/emma_ant.jar" /> 
</classpath> 

И перезапустил:

[report] processing input file [/Users/mjc/stack_overflow/emma/build/coverage.emma] ... 
[report] loaded 1 coverage data entries 
[report] processing input file [/Users/mjc/stack_overflow/emma/build/metadata.emma] ... 
[report] loaded 1 metadata entries 
[report] 2 file(s) read and merged in 4 ms 
[report] merged metadata contains 1 entries 
[report] merged coverage data contains 1 entries 
[report] writing [html] report to [/Users/mjc/stack_overflow/emma/reports/coverage.html] ... 
[report] report: processing package [default package] ... 

Похоже, что это исправлено для меня. У меня был один тест, который гласил:

[junit] Running SoTest 
[junit] Testsuite: SoTest 
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.081 sec 
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.081 sec 
[junit] 
[junit] ------------- Standard Output --------------- 
[junit] EMMA: collecting runtime coverage data ... 
[junit] ------------- ---------------- --------------- 

Если вы не видите никаких линий, как, что в муравьиной выходе, возможно, у вас нет тестов, которые соответствуют **/TetrisSuite.java шаблону?

+0

Вы имеете в виду это? Это не работает. –

+0

@Corvus - каким образом это не сработало? Сначала вы сделали чистую? –

+0

Я очистился, и он по-прежнему выводит «ничего не делать: никаких данных о покрытии во время выполнения, найденных в любом из файлов данных» –