当给定的JUnit4测试运行时,我希望它生成所有TestResults的日志文件。我不想通过CI / ant / maven调用它。 我希望在任何时候从任何地方调用JUnit测试都可以运行。如果那是不可能的话,那么我想编写自己的运行器,这会有问题地调用我的AllTestSuites类并记录所有结果本身。< / p>
这是我的一个测试类:
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...
答案 0 :(得分: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());
}
};
答案 1 :(得分:1)
答案 2 :(得分: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
}
}));
}