Java JUnitCore.runClasses不';不要打印任何东西

Java JUnitCore.runClasses不';不要打印任何东西,java,junit,Java,Junit,我有一个测试类,我正试图从主方法运行,代码如下: Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class); 当我检查结果对象时,我可以看到已经运行了5个测试,但屏幕上没有打印任何内容 我应该做些别的事情来获得输出吗?没有一种非常干净的方法可以做到这一点,因为这不是一件常见的事情。如果您正在创建一个可用于在命令行上运行测试的程序,并且JUnitCore本身就是这样做的,那么您只需要打印输出 所有选项都涉及在内部包中使用

我有一个测试类,我正试图从主方法运行,代码如下:

Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class);
当我检查结果对象时,我可以看到已经运行了5个测试,但屏幕上没有打印任何内容


我应该做些别的事情来获得输出吗?

没有一种非常干净的方法可以做到这一点,因为这不是一件常见的事情。如果您正在创建一个可用于在命令行上运行测试的程序,并且JUnitCore本身就是这样做的,那么您只需要打印输出

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

Result r = JUnitCore.runMain(new RealSystem(), TestReader.class.getName())
如果您想打印到除
System.out
之外的其他内容,您可以创建自己的
org.junit.internal.JUnitSystem
子类,并使用它而不是
RealSystem


您还可以使用
org.junit.internal.TextListener
。有关示例,请参见中的
runMain(JUnitSystem系统,字符串…args)

是的,您应该像这样注册
TextListener

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

你能举例说明为什么“这不是一件平常的事”吗。调用RunClass在烹饪书中有描述。如果有其他方法,那是什么?调用
runClasses()
的唯一时间是您正在编写自己的代码来运行测试。通常,您将JUnitCore作为主类,从IDE中运行测试,或者使用构建系统中内置的东西来运行测试。如果需要编写自定义类来运行测试,通常的方法是使用org.junit.runner.notification.RunListener`。就我个人而言,我一直很恼火有多少次我需要在JUnit4中做一些事情,并发现内部类是唯一的解决方案。JUnit4.11在存档中没有附带TextListener。在这种情况下我该怎么办?
runClasses(…)
方法创建一个新的
JUnitCore
,因此侦听器丢失(请参阅)。这就是为什么您应该使用
run()