首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Eclipse中使用JUnit RunListener?

如何在Eclipse中使用JUnit RunListener?
EN

Stack Overflow用户
提问于 2012-05-10 23:37:12
回答 3查看 2.8K关注 0票数 8

我为JUnit写了一个简单的RunListener,它在Maven上工作得很好。我可以把它注册到maven-failsafe-plugin中

代码语言:javascript
复制
<properties>
    <property>
        <name>listener</name>
        <value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value>
    </property>
</properties>

并查看来自侦听器的正确输出。

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

这个是可能的吗?为了测试的目的和一致性,最好有相同的输出。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-22 05:41:06

是的,这是可能的。基本上,您必须实现自己的Runner,并且在run方法中,您可以添加一个自定义的运行侦听器。我基于this post,第2点弄明白了这一点。

这是我的听众

代码语言:javascript
复制
public class TestLogger extends RunListener
{
    public void testFinished(Description description)
    {
        System.out.println("Successful " + description.getMethodName());
    }
}

这是我的跑步者

代码语言:javascript
复制
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测试。

代码语言:javascript
复制
@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);
    }
}    

您可以使用Eclipse中的上下文菜单运行MyTest1或Test1方法,它将如您所期望的那样调用testLogger。

票数 1
EN

Stack Overflow用户

发布于 2014-10-03 16:20:11

我有一组需要执行数据库的测试。我希望在它们执行开始时创建数据库,并在执行结束时删除它。

我还在maven -surefire- RunListener中添加了一个插件,它工作得很好。我还添加了一个名为ismaven的系统属性变量。当我从maven执行测试时,这个变量被初始化,但是当我从Eclipse执行测试时,这个变量是null (我用System.getProperty访问这个变量)。

代码语言:javascript
复制
<configuration>
  <properties>
    <property>
      <name>listener</name>
      <value>com.mycompany.MyRunListener</value>
    </property>
  </properties>
  <systemPropertyVariables>
    <ismaven>true</ismaven>
  </systemPropertyVariables>
</configuration>

我的所有数据库测试都继承自一个具有@BeforeClass和@AfterClass方法的类。这些方法检查测试是由Maven执行还是由Eclipse执行,检查ismaven属性的值。如果测试是由maven执行的,则ismaven属性有一个值,它们可以执行任何操作。但是如果测试是由Eclipse执行的,ismaven变量为null,它们启动(@BeforeClass)或停止(@AfterClass)数据库:

代码语言:javascript
复制
@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执行项目的所有测试,并保证在执行所有测试之前或之后执行一段代码。

票数 2
EN

Stack Overflow用户

发布于 2012-07-05 19:53:01

我对此做了更多的研究。据我所知,现在还没有办法添加一个运行侦听器,JUnit也可以在Eclipse中运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10537495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档