JUnitCore.runClasses不打印任何内容

Gré*_*ire 9 java junit

我有一个测试类,我正在尝试使用下面的代码从main方法运行:

Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class);
Run Code Online (Sandbox Code Playgroud)

当我检查Result对象时,我可以看到已经运行了5个测试,但屏幕上没有打印任何内容.

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

kop*_*per 20

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

    JUnitCore junit = new JUnitCore();
    junit.addListener(new TextListener(System.out));
    junit.run(TestReader.class);
Run Code Online (Sandbox Code Playgroud)


Nam*_*ter 3

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

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

Result r = JUnitCore.runMain(new RealSystem(), TestReader.class.getName())
Run Code Online (Sandbox Code Playgroud)

如果您想打印到除 之外的其他内容System.out,您可以创建自己的子类org.junit.internal.JUnitSystem并使用它来代替RealSystem

您也可以使用org.junit.internal.TextListener. 请参阅JUnitCore 源代码runMain(JUnitSystem system, String... args)中的示例。