2010-04-22 99 views
9

我有我试图从main方法如下因素代码运行测试类:JUnitCore.runClasses不打印任何东西

Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class); 

当我检查结果的对象,我可以看到5测试已经运行,但屏幕上没有打印任何内容。

我应该做些什么来获得输出吗?

回答

3

这样做并不是一个很干净的方法,因为这不是一件常见的事情。如果您要创建可用于在命令行上运行测试的程序,并且JUnitCore本身可以执行此操作,则只需要输出该输出。

所有选项都涉及在内部程序包中使用类。

Result r = JUnitCore.runMain(new RealSystem(), TestReader.class.getName()) 

如果你要打印到比System.out其他的东西,你可以创建自己的org.junit.internal.JUnitSystem子类,并用它来代替RealSystem

您还可以使用org.junit.internal.TextListener。举例来说,参见runMain(JUnitSystem system, String... args)the JUnitCore source

+0

你能例子,为什么,“这不是做一个普通的事情。”在食谱中描述调用runClasses。如果还有另一种方式去做,它是什么? – cmcginty 2011-02-09 19:38:35

+0

你唯一一次调用'runClasses()'是,如果你正在编写你自己的代码来运行测试。通常,您将JUnitCore作为主类,从IDE运行测试,或者使用构建系统中构建的内容来运行测试。如果您需要编写自定义类来运行测试,通常的方法是使用org.junit.runner.notification.RunListener'。就我个人而言,我一直在为需要在JUnit4中做些事情多少次而感到烦恼,并且发现内部类是唯一的解决方案。 – NamshubWriter 2011-02-10 14:46:36

20

是的,你应该注册TextListener这样的:

JUnitCore junit = new JUnitCore(); 
    junit.addListener(new TextListener(System.out)); 
    junit.run(TestReader.class); 
+0

JUnit 4.11在归档中没有附带TextListener。在这种情况下我该做什么? – djangofan 2012-12-14 00:36:07

+1

@djangofan:它是4.11中的org.junit.internal.TextListener。 – 2013-11-09 15:40:46

+0

'runClasses(...)'方法创建一个新的'JUnitCore',这样侦听器就会丢失(参见[github中的代码](https://github.com/junit-team/junit4/blob/a832c5afe5b0e7c2590d057a1a49a344d207f8a0/src /main/java/org/junit/runner/JUnitCore.java#L62))。这就是为什么你应该使用'run()'来代替。 – ecerulm 2017-10-30 09:47:44