18

プロセス レベル制御用の Python と内部状態検査用の junit を組み合わせて使用​​するクラウド システムのテスト セットアップがあります。基本的に、いくつかの VM をクラウドとしてサーバーに起動し、次にクラウドのメンバーであるがテストを実行して内部状態をチェックする junit VM を起動します。私たちの既存のクラウド管理は Python によって駆動されており、これを維持したいと考えています。

JUnitコマンドラインを介して実行する作業セットアップがあります

java -ea -cp <classpath> org.junit.runner.JUnitCore <tests>

ただし、これはレポート ファイルを生成しません。ant が xml レポートを作成できることは知っていますが、このプロセスに ant を関与させたくありません (可動部分はすでに十分にあります)。

レポートを生成するようにコマンドラインからjunitを起動する方法はありますか?

理想的には、junit テストで xml レポートを生成し、python テストで xml レポートを生成し、それらをマージして CI システムで使用できるようにします。

更新:コマンド ラインの実行は、Windows、Linux、および Mac をサポートする必要があります。外部アリを出荷することは許可されていませんが、内部アリをパッケージ化することはオプションかもしれません.

4

1 に答える 1

18

JUnitライブラリにはXML出力オプションがありません。このようなことを実現するには、独自のRunListenerを作成する必要があります。これは、出力をリッスンし、場合によってはXMLファイルを作成します。

ただし、XMLファイルを正しい形式で取得してCIシステムで読み取れるようにするには、build.xml(JUnitReport)を使用するコマンドラインまたはjava api:ApacheANTをプログラムで使用するにはどうすればよいですか。

編集:当初、4つのオプションがありました:

  1. コマンドラインからantを使用する
  2. プログラムでantを使用する(Java APIを使用)
  3. XMLJUnitResultFormatterをJUnitCoreで直接使用します
  4. 正しいXML出力を生成するカスタムRunListenerを作成します。

OPによって追加された制限を考えると、コマンドラインからantを使用することはできません。これにより、1が削除されます。

Ant JUnitタスクを詳しく調べた後、antはテストクラスの名前を直接使用するため、ブリッジクラスを実行できないため、これをJUnitCore(TestListenerの追加)で使用することは不可能のようです。XMLJUnitResultFormatter.javaから

private void formatError(String type, Test test, Throwable t) {
    ...
    nested.setAttribute(ATTR_TYPE, t.getClass().getName());

    String strace = JUnitTestRunner.getFilteredTrace(t);
    Text trace = doc.createTextNode(strace);
    nested.appendChild(trace);
}

これにより、3が削除されます。

Java APIを介して、プログラムでAntを呼び出します。これに関する最近のドキュメントが見つかりません。これは難しいようです。

したがって、最後に、XMLJUnitResultFormatterのコードをベースとして使用して、カスタムRunListenerである4を実行します。そして、それをgithub.comに公開するので、この質問に正しく答えることができます:-)

于 2012-09-20T15:23:33.100 に答える