【问题标题】:How to log test pass/fail results of JUnit4 to a file?如何将 JUnit4 的测试通过/失败结果记录到文件中?
【发布时间】:2012-11-02 16:43:29
【问题描述】:

当一个给定的 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();
    }

}

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

@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...

【问题讨论】:

    标签: java junit junit4


    【解决方案1】:

    在您的测试类和基础测试类中添加记录器并定义为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());
       }
    };
    

    【讨论】:

      【解决方案2】:

      您可以使用 JUnit TestWatcher

      TestWatcher 定义了以下方法:

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

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

      【讨论】:

        【解决方案3】:

        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
        
                }
            }));
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多