如何将JUnit4的测试通过/失败结果记录到文件中?

Zom*_*ies 2 java junit junit4

当给定的JUnit4测试运行时,我希望它生成所有TestResults的日志文件.我不想通过CI/ant/maven调用它.我想在任何时候从任何地方调用JUnit测试时运行它.如果那是不可能的,那么我想编写我自己的运行器,它有问题地调用我的AllTestSuites类并记录所有结果本身.

这将是我的一个测试类:

public class SimpleTestSuite extends TestCase{

    @Test
    public void simpleTestPass() {
        assertTrue(true);
    }

    @Test
    public void simpleTestFail() {
        assertTrue(false);
    }

    @Test
    public void simpleTestException() {
        throw new RuntimeException();
    }

}
Run Code Online (Sandbox Code Playgroud)

我将它包含在TestSuite中,其中包含我要运行的所有测试套件:

@RunWith(Suite.class)
@Suite.SuiteClasses({SimpleTestSuite.class, ExampleSuite.class,})
public final class AllTestSuites {}
Run Code Online (Sandbox Code Playgroud)

我想调用AllTestSuites并让它生成一个日志文件,如下所示.请记住,我更喜欢捕获JUnit4框架结果总线上的内容,而不是重新创建/创建新的测试运行器.

simpleTestPass - pass - 1/1 assertions passed
simpleTestFail - fail - 0/1 assertions passed
simpleTestException - exception - stacktrace as follows...
Run Code Online (Sandbox Code Playgroud)

Yog*_*ngh 5

在Test Class和Base Test Class中添加记录器并定义TestWatchMan如下:

Logger logger = LoggerFactory.getLogger(TestCase.class);
@Rule public MethodRule watchman = new TestWatchman() {
   public void starting(FrameworkMethod method) {
      logger.info("Test {} is running.", method.getName());
   }
   public void succeeded(FrameworkMethod method) {
   logger.info("Test {} succesfully run.", method.getName());
   }
   public void failed(Throwable e, FrameworkMethod method) {
        logger.error("Test {} failed with {} reason.", 
                                                method.getName(), e.getMessage());
   }
};
Run Code Online (Sandbox Code Playgroud)