2

当一个给定的 JUnit4 测试运行时,我希望它生成一个包含所有测试结果的日志文件。我不想通过 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();
    }

}

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

@RunWith(Suite.class)
@Suite.SuiteClasses({SimpleTestSuite.class, ExampleSuite.class,})
public final class AllTestSuites {}

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

simpleTestPass - pass - 1/1 assertions passed
simpleTestFail - fail - 0/1 assertions passed
simpleTestException - exception - stacktrace as follows...
4

3 回答 3

5

在您的测试类和基础测试类中添加记录器并定义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());
   }
};
于 2012-11-02T16:53:20.027 回答
1

您可以使用 JUnit TestWatcher

TestWatcher 定义了以下方法:

  • 成功()
  • 失败的()
  • 开始()
  • 完成的()

您可以实现它以获取事件通知并将它们写入文件。

于 2012-11-02T17:22:35.213 回答
0

JUnit 会将这些结果输出到标准 System.out。也许您可以将该输出重定向到一个文件。

@BeforeClass 
void redirectOut(){
    System.setOut(new PrintStream(new OutputStream() {
        @Override
        public void write(int arg0) throws IOException {
        // TODO Auto-generated method stub

        }
    }));
}
于 2012-11-02T17:12:33.120 回答