我写了JUnit的简单RunListener与Maven的作品相当不错的。 我可以注册它通过Maven的故障保护,插件
<properties>
<property>
<name>listener</name>
<value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value>
</property>
</properties>
看到从听者输出正确的。
现在,我要注册在Eclipse的RunListener看到相同的输出那里,当我运行测试。
这可能吗? 出于测试目的,是一致的,将是很好,有相同的输出。
对的,这是可能的。 基本上,你要实现自己的亚军和运行方法中,你可以添加自定义运行监听器。 我想在此基础上进行这个帖子 ,点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如你所愿。
我有一组需要一个数据库来执行测试。 我想在他们开始执行创建数据库,并在年底将其删除。
从行家我还添加了一个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与保证执行你的项目的所有测试,你会前,或所有的测试执行后执行一次的一段代码。
我做了一些这方面的更多reseatrch。 至于我现在可以看到,有没有办法添加运行监听过了JUnit运行在Eclipse中。