如何使用在Eclipse JUnit的RunListener?(How can I use a JU

2019-09-17 03:32发布

我写了JUnit的简单RunListener与Maven的作品相当不错的。 我可以注册它通过Maven的故障保护,插件

<properties>
    <property>
        <name>listener</name>
        <value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value>
    </property>
</properties>

看到从听者输出正确的。

现在,我要注册在Eclipse的RunListener看到相同的输出那里,当我运行测试。

这可能吗? 出于测试目的,是一致的,将是很好,有相同的输出。

Answer 1:

对的,这是可能的。 基本上,你要实现自己的亚军和运行方法中,你可以添加自定义运行监听器。 我想在此基础上进行这个帖子 ,点2。

这里是我的听众

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

这里是我的亚军

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);
    }
}

这里是我的实际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);
    }
}    

您可以运行MyTest1或使用Eclipse中的上下文菜单中的Test1的方法,它会调用testLogger如你所愿。



Answer 2:

我有一组需要一个数据库来执行测试。 我想在他们开始执行创建数据库,并在年底将其删除。

从行家我还添加了一个RunListener到Maven的万无一失,插件,它工作正常。 而且我还添加了一个名为ismaven系统属性变量。 当我从行家执行测试这个变量初始化,但是当我从Eclipse执行测试,该变量为空(我访问的变量,System.getProperty)。

<configuration>
  <properties>
    <property>
      <name>listener</name>
      <value>com.mycompany.MyRunListener</value>
    </property>
  </properties>
  <systemPropertyVariables>
    <ismaven>true</ismaven>
  </systemPropertyVariables>
</configuration>

我所有的数据库测试从具有@BeforeClass和@AfterClass方法的类继承。 这些方法检查测试正在由Maven的或由Eclipse检查ismaven属性的值来执行。 如果测试是由行家执行时,ismaven酒店的价值,他们做任何事。 但在测试正在由Eclipse执行时,ismaven变量为空,他们开始(@BeforeClass)或停止(@AfterClass)数据库:

@BeforeClass
public static void checkIfStartDatabase() {   
  String ismaven = System.getProperty("ismaven");
  // If it is not maven, start the database
  if (ismaven == null) {
    startDatabase();
  }
}

@AfterClass
public static void checkIfStopDatabase() {
  String ismaven = System.getProperty("ismaven");
  // If it is not maven, stop the database
  if (ismaven == null) {
    stopDatabase();
  }
}

这个解决方案没有解决100%你的问题,但如果你实现它,你可以执行(和调试)使用Eclipse的一个JUnit类中的所有测试,你也可以使用Maven与保证执行你的项目的所有测试,你会前,或所有的测试执行后执行一次的一段代码。



Answer 3:

我做了一些这方面的更多reseatrch。 至于我现在可以看到,有没有办法添加运行监听过了JUnit运行在Eclipse中。



文章来源: How can I use a JUnit RunListener in Eclipse?