如何在@AfterClass中获得测试结果

时间:2019-10-14 12:56:01

标签: java junit

我试图环顾四周,但是找不到任何答案,尽管我确定必须有一个答案。

我有一个JAVA测试,其中可能包含多个@test批注,当我进入@AfterClass时,我希望能够打印出哪些通过和哪些未通过。

我发现使用org.junit.runner.RunListener提到了一些内容,但我认为这行不通,因为我没有主要方法,只是@Before

有没有一种简单的方法可以完成我想要的工作?

1 个答案:

答案 0 :(得分:0)

public class TestsWithResultListener {
    @Rule
    public static CollectResults resultCollector = new CollectResults();

    @Test
    public void aPassingTest() throws Exception {
        assertThat(true, equalTo(true));
    }

    @Test
    public void aFailingTest() throws Exception {
        assertThat(true, equalTo(false));
    }

    @AfterClass
    public static void printResults() throws Exception {
        System.out.println("=== PASSED ===");
        resultCollector.passed.forEach(test -> {
            System.out.println(test.getMethod().getName());
        });
        System.out.println("=== FAILED ===");
        resultCollector.failed.forEach(test -> {
            System.out.println(test.getMethod().getName());
        });
    }

    private static class CollectResults extends TestWatchman {
        private List<FrameworkMethod> passed = new ArrayList<>();

        private List<FrameworkMethod> failed = new ArrayList<>();

        public void succeeded(FrameworkMethod method) {
            passed.add(method);
        }

        public void failed(Throwable e, FrameworkMethod method) {
            failed.add(method);
        }
    }
}