2

特定の JUnit4 テストが実行されたときに、すべての TestResults のログファイルを生成したいと考えています。CI/ant/maven 経由でこれを呼び出したくありません。JUnit テストがどこからでも呼び出されるたびに、これを実行したいと考えています。それが不可能な場合は、問題のある AllTestSuites クラスを呼び出してすべての結果自体をログに記録する独自のランナーを書きたいと思います。

ここに私のテストクラスの1つがあります:

public class SimpleTestSuite extends TestCase{

    @Test
    public void simpleTestPass() {
        assertTrue(true);
    }

    @Test
    public void simpleTestFail() {
        assertTrue(false);
    }

    @Test
    public void simpleTestException() {
        throw new RuntimeException();
    }

}

実行するすべてのテスト スイートを含む TestSuite に含めました。

@RunWith(Suite.class)
@Suite.SuiteClasses({SimpleTestSuite.class, ExampleSuite.class,})
public final class AllTestSuites {}

AllTestSuites を呼び出して、以下のようなログ ファイルを生成したいと考えています。私はJUnit4フレームワークの結果バスにあるものをキャプチャすることを好み、新しいテストランナーを再発明/作成することは好まないことを覚えておいてください。

simpleTestPass - pass - 1/1 assertions passed
simpleTestFail - fail - 0/1 assertions passed
simpleTestException - exception - stacktrace as follows...
4

3 に答える 3

5

テスト クラスとベース テスト クラスにロガーを追加し、次のように定義しTestWatchManます。

Logger logger = LoggerFactory.getLogger(TestCase.class);
@Rule public MethodRule watchman = new TestWatchman() {
   public void starting(FrameworkMethod method) {
      logger.info("Test {} is running.", method.getName());
   }
   public void succeeded(FrameworkMethod method) {
   logger.info("Test {} succesfully run.", method.getName());
   }
   public void failed(Throwable e, FrameworkMethod method) {
        logger.error("Test {} failed with {} reason.", 
                                                method.getName(), e.getMessage());
   }
};
于 2012-11-02T16:53:20.027 に答える
1

JUnit TestWatcherを使用できます。

TestWatcher は、次のメソッドを定義します。

  • 成功しました()
  • 失敗した()
  • 起動()
  • 終了した()

イベントの通知を受け取り、それらをファイルに書き込むために実装できます。

于 2012-11-02T17:22:35.213 に答える
0

JUnit は、これらの結果を標準の System.out に出力します。おそらく、その出力をファイルにリダイレクトできます。

@BeforeClass 
void redirectOut(){
    System.setOut(new PrintStream(new OutputStream() {
        @Override
        public void write(int arg0) throws IOException {
        // TODO Auto-generated method stub

        }
    }));
}
于 2012-11-02T17:12:33.120 に答える