22

UnitTest++をテスト ライブラリとして使用する C++ プロジェクトの継続的統合サーバーとしてHudsonを使用した人はいますか?

具体的にどのように設定しましたか?

以前にも継続的インテグレーションに関する質問がいくつかあったことは承知していますが、今回の質問の範囲がより狭いものであることを願っています。

編集:私が探しているものについて少し明確にします。単体テストが失敗したときにビルドが失敗するように設定しています。Hudson の JUnit サポートのようなものを探しています。UnitTest++ は XML レポートを作成できます (こちらを参照)。したがって、おそらく誰かがこれらのレポートを JUnit 互換に変換する方法を知っていれば、ハドソンはそれを食い尽くす方法を知っているでしょうか?

4

6 に答える 6

12

私の職場でも積極的に取り組んでいます。

現在、フリー スタイルのソフトウェア プロジェクトを使用して、次のことを行っています。

  • Subversion リポジトリで 15 分ごとに更新を確認してください
  • Windows バッチ ファイルを呼び出して、ソリューション ファイルをクリーンアップしてビルドする
    • プロジェクト ファイルは、ビルド後のイベントとして単体テストをビルドおよび実行します
    • 単体テストの失敗は test によって返されるためmain()、ビルド エラーとして扱われます。

また、UnitTest++ に含まれる XmlTestReporter を使用して出力ファイルを生成する構成もテストしました。xUnit プラグインは、変換可能な他の出力と共に、この出力をネイティブにサポートしますが、テスト履歴に期間を記録するには、バージョン 0.1.3 に付属の XSL ファイルを変更する必要がありました。

統合に関して改善したいことがたくさんあります。ビルド ログは長く、色付けや強調表示などがないため解析が困難ですが、これまでのところ、それでも有益です。

于 2009-01-05T14:48:15.733 に答える
6

パトリック・ジョンマイヤーが受け入れられた回答で提案したように、 xUnitプラグインをチェックしました。完全を期すために、ドライバーコードは次のとおりです。

#include <fstream>
#include "UnitTest++.h"
#include "XmlTestReporter.h"

int main( int argc, char *argc[] ) {
    std::ofstream f("file.xml");
    UnitTest::XmlTestReporter reporter(f);
    return UnitTest::RunAllTests(reporter, UnitTest::Test::GetTestList(), NULL, 0);
}

Hudson の構成で、「テスト ツールの結果レポートを公開する」にチェックを入れて、"file.xml"

于 2009-12-16T14:26:11.317 に答える
4

Hudson には、このトリックを実行できるCppUnit プラグインが含まれています。

于 2009-04-30T22:13:32.863 に答える
2

Hudson を使い始めるずっと前に、cpp-unit-lite と CruiseControl を使用する C++ プロジェクトに取り組みました。

Cpp-unit-lite を変更して、JUnit のような XML レポート ファイルを生成し、CruiseControl が XML レポート ファイルを取得しました。

UnitTest++ でも同じことができ、Hudson がレポート ファイルを取得します。

しかし、それは大変な作業のようです。Hudson のプロット プラグインを見てください。スクリプトで UnitTest++ の出力から失敗/成功したテストの数を抽出し、プロット プラグインを使用して、ビルドごとの成功/失敗したテストの単純なグラフを描画できます。

組み込みの単体テスト レポートほど良くはありませんが、すぐに作業を開始できるものです。

于 2009-01-07T09:49:59.517 に答える
2

CppUnit と xml 出力で hudson を使用します。xml は、xslt によって次のような JUnit 出力に変換されます。CppUnit サイトは、CppUnit 出力を JUnit 出力に変換する xslt を提供します。次のような mre 詳細を取得するために、少しハッキングしました。

  • パッケージとしての名前空間
  • 実行時間

xml 出力を変換して、以下を取得できます。

<?xml version="1.0" encoding="UTF-8"?>
<testsuite>
   <testcase name="my test name"
             classname="Package1.Package2.TestClass"
             time="0.25">
      <error type="error"/>
   </testcase>
   ....
</testsuite>

成功した場合: サブタグを削除するだけです

よろしく

于 2009-03-31T14:20:29.617 に答える
1

私のオフィスでは、UnitTest++ の代わりに cxxtest を使用することを除いて、同様のアプローチを使用してきました。現在、Google の非常に優れた (imho) gtest フレームワークに移行中です。

cxxtest では、Patrick J. が提案したのと同様のことを行いました。これは基本的に、ant を介してテスト スイート プログラムを実行し、テストが失敗した場合にビルドを失敗させるビルド ステップを追加することでした。このアプローチの欠点は、テスト結果が原因でビルドが失敗した場合に、何が問題なのかを突き止めるためにコンソール出力を調べなければならないことです。また、テスト フレームワークが junit 互換の XML を出力できる場合、hudson が生成できる気の利いたグラフを失います。

gtest に切り替える動機の 1 つは、gtest が junit XML を生成することです。したがって、理論的には、hudson はテスト結果を解析し、より賢明な方法で公開できます。とにかく、UnitTest++ がこのようなものを生成するようには見えないので (間違っていたら訂正してください)、議論の余地があるかもしれませんが、少なくともビルド プロセスに統合することで、テストが確実に実行されるようになります。ビルドします。

于 2009-01-05T19:08:23.103 に答える