5

編集: この問題は、gtest 1.4.0 で Google によって修正されました。詳細については、元のバグ レポートを参照してください。

最近、C++ テスト フレームワークを gtest に切り替えました。現在使用できない優れた機能の 1 つは、JUnit スタイルの XML テスト レポートを生成する機能です。これは、hudson ビルド サーバーで読み取ることができます。

gtest テスト スイートによって生成された XML 出力はすべて正当に見えます。

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
...etc.
    </testsuite>
</testsuite>

また、ant ビルド スクリプトに JUnitReport タスクを追加しようとしましたが、これは正常に動作し、次のように XML を生成します。

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
    ...etc.
    </testsuite>
 </testsuite>

問題は、JUnit テスト結果を公開するように ant に指示し、生のテスト結果 XML または ant JUnitReport タスクで生成されたコンパイル済み結果のいずれかを指すようにすると、常に hudson がそこにテスト結果が見つからないと不平を言うことです。

私は Java の専門家ではないので、ここで何が起こっているのかわかりません。また、JUnit XML がどのように見えるべきかの例を見つけることもできません。誰かが私を正しい方向に向けるのを助けることができますか?

4

3 に答える 3

6

これが私がそれを行う方法です:

    <target name="junit" depends="compile-tests" description="run all unit tests">
      <mkdir dir="${reports}"/>
      <junit haltonfailure="false">
         <jvmarg value="-Xms128m"/>
         <jvmarg value="-Xmx128m"/>
         <classpath>
            <path refid="project.classpath"/>
         </classpath>
         <formatter type="xml"/>
         <batchtest fork="yes" todir="${reports}">
            <fileset dir="${test}/classes">
                <include name="**/*Test*.class"/>
            </fileset>
         </batchtest>
      </junit>
  </target>

  <target name="generate-reports" depends="junit" description="create JUnit test HTML reports">
      <mkdir dir="${reports}"/>
      <junitreport todir="${reports}">
          <fileset dir="${reports}">
              <include name="TEST-*.xml"/>
          </fileset>
          <report format="frames" todir="${reports}"/>
      </junitreport>
  </target>
于 2009-01-09T15:51:04.583 に答える
0

これはXMLの解析の問題ではなく、XMLファイルの検索の問題であるとほぼ確信しています。Hudson構成で相対パスを使用している場合は、それがどのディレクトリに関連しているかを明確にしてください(特定の状況下では非自明であることを覚えているようです)。

JUnit XMLファイルがどのように見えるかの例としては、幸運を祈ります。どこにも正確に指定されていません。ツールが異なれば、方言も異なります。そうは言っても、ハドソンはそれらすべてをうまく認識しています。XML形式を最初に導入したのはJUnitReportの開発者だったと思います。したがって、それを使用している場合、それはあなたが取得しようとしているのとほぼ同じくらい標準的です。

于 2009-01-14T18:16:14.850 に答える