aioobe:
私は拡張してカスタムランナーを作成しましたSuite
:
public class MyRunner extends Suite {
public MyRunner(Class<?> klass, RunnerBuilder builder) throws InitializationError {
super(klass, builder);
}
@Override
public void run(RunNotifier notifier) {
notifier.addListener(new MyRunListener());
notifier.fireTestRunStarted(getDescription());
super.run(notifier);
}
}
見られるようにrun
、このregisteres MyRunListener
次のようになりた:
class MyRunListener extends RunListener {
@Override
public void testRunStarted(Description description) {
System.err.println("1: run started");
}
@Override
public void testStarted(Description description) {
System.err.println("2: test started");
}
@Override
public void testFinished(Description description) {
System.err.println("3: test finished");
}
@Override
public void testRunFinished(Result result) {
System.err.println("4: run finished");
}
}
私が追加した1:
、2:
、3:
と4:
私は、これらのメソッドが呼び出されることを期待した順序に従って。
ルックスは、次のようにすることを、私は、テストスイートを作成しました:
@RunWith(MyRunner.class)
@Suite.SuiteClasses({ MyTest.class })
public class MyTestSuite {
}
そして、次のテスト:
public class MyTest {
@BeforeClass
public static void beforeClass() {
System.err.println("A: beforeClass");
}
@Before
public void before() {
System.err.println("B: before");
}
@Test
public void test() {
System.err.println("C: Running actual test...");
}
@After
public void after() {
System.err.println("D: after");
}
@AfterClass
public static void afterClass() {
System.err.println("E: afterClass");
}
}
ここでも、出力は私が期待する順序に従ってラベルされました。
ここで私が実行したときに私が手出力ですMyTestSuite
IntelliJの通過(JUnitの実行構成としては):
2: test started
B: before
C: Running actual test...
D: after
3: test finished
E: afterClass
4: run finished
1: run started
A: beforeClass
なぜ地球上で私は、その出力順序を取得していますか?私はランナーでは非常に間違って何かをする必要がありますが、私は、ウェブ上のチュートリアルに従って、それを実装しました。(JUnitの4.12を使用して)
aioobe:
@DmitryBはコメントで示唆したように、出力バッファリングのいくつかのフォームのようです。出力の様々な部分は、テストが終了した後に奇妙な方法で一緒にステッチされます。
私は、追加Thread.sleep(1000)
の各プリントアウトした後、これは私がのIntelliJでそれを実行すると、それがどのように見えるかです:
今の問題を回避するには、JUnitの1のではなく、Gradleのタスクの実行構成を使用することです。
提出されたこのチケットをジェットブレーンズで。