如何在Eclipse中使用JUnit RunListener?

Ric*_*wig 7 eclipse junit maven maven-failsafe-plugin

我为JUnit编写了一个简单的RunListener,它可以很好地与Maven一起使用.我可以通过maven-failsafe-plugin注册它

<properties>
    <property>
        <name>listener</name>
        <value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value>
    </property>
</properties>
Run Code Online (Sandbox Code Playgroud)

并从监听器中查看正确的输出.

现在我想在Eclipse中注册相同的RunListener,以便在运行测试时看到相同的输出.

这可能吗?出于测试目的并保持一致,最好具有相同的输出.

Joh*_*kel 1

对的,这是可能的。基本上,您必须实现自己的 Runner,并且在 run 方法内,您可以添加自定义运行侦听器。我根据这篇文章的第2点弄清楚了这一点。

这是我的听众

public class TestLogger extends RunListener
{
    public void testFinished(Description description)
    {
        System.out.println("Successful " + description.getMethodName());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的跑步者

public class TestRunner extends BlockJUnit4ClassRunner
{
    public TestRunner(Class<?> klass) throws InitializationError
    {
        super(klass);
    }

    @Override
    public void run(RunNotifier notifier)
    {
        notifier.addListener(new TestLogger());   // THIS IS THE IMPORTANT LINE
        super.run(notifier);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我实际的junit测试

@RunWith(TestRunner.class)           // THIS LINE IS ALSO IMPORTANT
public class MyTest1
{
    @Test
    public void Test1() throws Exception
    {
        if (Math.random() < .5) throw new Exception("ouch");
        assertFalse(Math.random() < .5);
    }
}    
Run Code Online (Sandbox Code Playgroud)

您可以使用 Eclipse 中的上下文菜单运行 MyTest1 或 Test1 方法,它将按照您的预期调用 testLogger。