1

Ant スクリプトに関連する cobertura について質問があります。StackOverflow に関する次の 2 つの記事を既に読みました: SONAR - CoberturaBamboo を使用したコード カバレッジの測定 + 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>

問題は、クラスが build/cobertura/classes ディレクトリにあることです。そして、なぜJunitがクラスを見つけられないのか理解できません

4

1 に答える 1

0

クラスパス:

    <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 jar も必要ですpath.additionaltasks。Cobertura は、クラス ファイルをバイト コード操作で計測します。これらのファイルが機能するには、引き続き cobertura.jar 依存関係が必要です。
それを修正するにはpath.additionaltasks、junit に追加します。

    <classpath>
        <!--<pathelement path="build/cobertura/classes" />-->
        <path refid="path.UNITTEST" />
        <path refid="path.additionaltasks" />
    </classpath>
于 2012-10-10T11:34:49.797 に答える