2012-11-02 29 views
2

当给定的JUnit4测试运行时,我希望它生成所有TestResults的日志文件。我不想通过CI/ant/maven调用它。 我希望在任何时候都可以随时调用JUnit测试。如果这是不可能的,那么我想写我自己的亚军,它有问题地调用我的AllTestSuites类并记录所有结果本身。如何将JUnit4的测试通过/失败结果记录到文件中?

这里将是我的测试类:

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

回答

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

     } 
    })); 
} 
1

您可以使用JUnit TestWatcher

一个TestWatcher定义了以下方法:

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

,你可以实现得到通知并将它们写入文件。

相关问题