我为JUnit写了一个简单的RunListener,它在Maven上工作得很好。我可以把它注册到maven-failsafe-plugin中
<properties>
<property>
<name>listener</name>
<value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value>
</property>
</properties>并查看来自侦听器的正确输出。
现在,我想在Eclipse中注册相同的RunListener,以便在运行测试时看到相同的输出。
这个是可能的吗?为了测试的目的和一致性,最好有相同的输出。
发布于 2014-11-22 05:41:06
是的,这是可能的。基本上,您必须实现自己的Runner,并且在run方法中,您可以添加一个自定义的运行侦听器。我基于this post,第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);
}
} 您可以使用Eclipse中的上下文菜单运行MyTest1或Test1方法,它将如您所期望的那样调用testLogger。
发布于 2014-10-03 16:20:11
我有一组需要执行数据库的测试。我希望在它们执行开始时创建数据库,并在执行结束时删除它。
我还在maven -surefire- RunListener中添加了一个插件,它工作得很好。我还添加了一个名为ismaven的系统属性变量。当我从maven执行测试时,这个变量被初始化,但是当我从Eclipse执行测试时,这个变量是null (我用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属性的值。如果测试是由maven执行的,则ismaven属性有一个值,它们可以执行任何操作。但是如果测试是由Eclipse执行的,ismaven变量为null,它们启动(@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执行项目的所有测试,并保证在执行所有测试之前或之后执行一段代码。
发布于 2012-07-05 19:53:01
我对此做了更多的研究。据我所知,现在还没有办法添加一个运行侦听器,JUnit也可以在Eclipse中运行。
https://stackoverflow.com/questions/10537495
复制相似问题