2

JUnitCore の RunNotifier を呼び出したい。これは fNotifier と呼ばれ、JUnitCore クラスで開始されます。ソース:

https://github.com/KentBeck/junit/blob/master/src/main/java/org/junit/runner/JUnitCore.java

どういうわけかリフレクションによってこれを取得できますか、またはこの RunNotifier を呼び出すことができる他の方法はありますか。

pleaseStop()彼の方法を使いたい。

4

2 に答える 2

2

リフレクションを使用するのは最善の方法ではありませんが、次のようにすることができます。

public static void main(String[] args) throws Exception {
    Computer computer = new Computer();

    JUnitCore jUnitCore = new JUnitCore();
    Field field = JUnitCore.class.getDeclaredField("fNotifier");
    field.setAccessible(true);
    RunNotifier runNotifier = (RunNotifier) field.get(jUnitCore);
    runNotifier.pleaseStop();
    jUnitCore.run(computer, BeforeAfterTest.class, AssertionErrorTest.class);
}

これにより、org.junit.runner.notification.StoppedByUserExceptionがスローされます。

より柔軟性や制御が必要な場合は、上記を実行するためのより良い方法は、必要なビットを JUnitCore からクラスにコピーするだけで、通知機能やリスナーなどを直接制御できます。これが最も優れていますそれを行う方法。JUnitCore は実際には拡張できるようには設計されていません。

于 2012-04-10T11:54:31.917 に答える
1

JUnit 4.1.2 を使用すると、フィールド名が 'notifier に変更されました:

 Field field = JUnitCore.class.getDeclaredField("notifier");
于 2015-01-18T08:12:26.507 に答える