Кобертура + Юнит

У меня вопрос о cobertura в связи со скриптами Ant. Я уже читал эти две статьи о StackOverflow: SONAR - Измерение покрытия кода с помощью Cobertura и Bamboo + sonar.dynamicAnalysis = reuseReports = 0% соблюдение правил

Кроме того, я искал в Интернете решение своей проблемы. Теперь я надеюсь, что ты сможешь мне помочь.

Исходная ситуация: у меня есть сценарий Ant для компиляции библиотеки, а затем - тестовая цель. Теперь я добавил кобертуру. Через некоторое время я понял, что классы, а также файл ser хранятся. Отчет также создается, но без покрытия. Но теперь проблема в том, что тест JUnit не работает. В xml можно найти следующее сообщение об ошибке:

<testcase classname="com.***.***.***.***.***Test" name="test16" time="0.0">
<error message="com/***/***/***/***/***Rule" type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError: com/***/***/***/***/***Rule
at com.***.***.***.***.***Test.setUp(Unknown Source)
at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)

В настоящее время я использую следующий код в скрипте Ant:

<project name="MainLIB" default="vbuild" basedir="./">
<path id="path.additionaltasks">
    <fileset dir="../BUILD/antlib">
        <include name="cobertura.jar" />
        <include name="log4j-1.2.9.jar" />
        <include name="asm-3.0.jar" />
        <include name="asm-tree-3.0.jar" />
        <include name="jakarta-oro-2.0.8.jar" />
    </fileset>
</path>
<taskdef resource="tasks.properties" classpathref="path.additionaltasks" />

<path id="path.LIB">
    <fileset dir="lib" includes="**/**.jar" />
</path>

<path id="path.UNITTEST">
    <path refid="path.LIB" />
    <pathelement path="build/cobertura/classes" />
    <pathelement path="build/classes" />
    <pathelement path="build/test-classes" />
</path>

<property name="dir.build" value="build" />
<property name="dir.build.classes" value="${dir.build}/classes" />
<property name="dir.build.cobertura" value="${dir.build}/cobertura" />
<property name="dir.build.cobertura.classes" value="${dir.build.cobertura}/classes" />
<property name="dir.build.test.classes" value="${dir.build}/test-classes" />
<property name="dir.build.test.report" value="${dir.build}/test-reports" />
<property name="dir.build.dist" value="${dir.build}/dist" />

<target name="vbuild" depends="build,test" description="Build and run tests" />

<target name="build" description="Compile classes and create .jar file in build/dist">

    <delete dir="${dir.build}" />
    <mkdir dir="${dir.build.classes}" />

    <javac srcdir="src" classpathref="path.LIB" verbose="false" destdir="${dir.build.classes}" includeantruntime="false" includejavaruntime="false" debug="true">
    </javac>

    <mkdir dir="${dir.build.dist}" />

    <jar jarfile="${dir.build.dist}/${jar.name}.jar" basedir="${dir.build.classes}">
    </jar>
</target>

<target name="test" description="Compile and Run jUnit Tests">

    <mkdir dir="${dir.build.test.classes}" />
    <mkdir dir="${dir.build.test.report}" />

    <javac srcdir="test" classpathref="path.UNITTEST" verbose="false" destdir="${dir.build.test.classes}" includeantruntime="false" includejavaruntime="false">
    </javac>

    <delete dir="${dir.build.cobertura}" />
    <mkdir dir="${dir.build.cobertura}" />
    <mkdir dir="${dir.build.cobertura.classes}" />
    <cobertura-instrument todir="${dir.build.cobertura.classes}" datafile="${dir.build.cobertura}/cobertura.ser">
        <fileset dir="${dir.build.classes}" />

    </cobertura-instrument>

    <junit printsummary="yes">
        <classpath>
            <!--<pathelement path="build/cobertura/classes" />-->
            <path refid="path.UNITTEST" />

        </classpath>
        <formatter type="xml" />

        <batchtest todir="${dir.build.test.report}">
            <fileset dir="${dir.build.test.classes}">
                <include name="**/*Test.class" />
            </fileset>
        </batchtest>
    </junit>

    <cobertura-report format="xml" datafile="${dir.build.cobertura}/cobertura.ser" destdir="${dir.build.cobertura}/" />
    <cobertura-report format="html" datafile="${dir.build.cobertura}/cobertura.ser" destdir="${dir.build.cobertura}/" />
</target>

The problem is, the classes are in the build/cobertura/classes directory. And I can't figure out, why Junit, can't find the classes


person user1734614    schedule 10.10.2012    source источник
comment
в пути к классам в junit отсутствуют файлы библиотеки cobertura. Они необходимы для выполнения инструментальных тестов. Но ваша ошибка, похоже, указывает на то, что в вашем пути к классам не хватает чего-то большего.   -  person oers    schedule 10.10.2012
comment
Спасибо, что это было Теперь он работает: D   -  person user1734614    schedule 10.10.2012


Ответы (1)


Ваш путь к классам:

    <classpath>
        <!--<pathelement path="build/cobertura/classes" />-->
        <path refid="path.UNITTEST" />

    </classpath>

Содержит:

<path id="path.LIB">
    <fileset dir="lib" includes="**/**.jar" />
</path>

<path id="path.UNITTEST">
    <path refid="path.LIB" />
    <pathelement path="build/cobertura/classes" />
    <pathelement path="build/classes" />
    <pathelement path="build/test-classes" />
</path>

Но ему также нужны банки cobertura, о которых вы упоминаете в path.additionaltasks. Cobertura обрабатывает файлы классов манипуляциями с байтовым кодом. Для работы этих файлов по-прежнему требуется зависимость cobertura.jar.
Чтобы исправить это, добавьте path.additionaltasks в junit:

    <classpath>
        <!--<pathelement path="build/cobertura/classes" />-->
        <path refid="path.UNITTEST" />
        <path refid="path.additionaltasks" />
    </classpath>
person oers    schedule 10.10.2012