我想运行现有测试两次,一次将日志级别设置为TRACE,一次将日志级别设置为ERROR。为此,我尝试使用测试套件并添加了一个用@Before
注释的方法。
代码本身是用Spring Boot编写的,默认记录器配置为Log level TRACE,因此正常的测试执行是使用Log level TRACE,这对于第一次运行很有用。
对于套件的运行(其中第二次配置了所有测试),我希望在执行每个测试之前调用带有注释的@Before
方法,但不是。
我唯一看到的效果是,当我调用@BeforeClass
时,它被调用了一次。由于每个测试都会从头开始启动spring上下文,因此我重写的Log级别仅在执行的第一个测试中使用。
这是我的测试套件,您有什么想法要实现?
@RunWith(ParallelSuite.class)
@SuiteClasses("**/*Test.class")
@Log4j2
public class TestSuiteWithErrorLogger {
@BeforeClass
public static void beforeClass() {
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Logger controller = (Logger) LoggerFactory.getLogger("komposit.guidewire.controller");
root.setLevel(Level.ERROR);
controller.setLevel(Level.ERROR);
log.error("set logging to warn so that all tests will be called without log statements");
}
@Before
public void before() {
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Logger controller = (Logger) LoggerFactory.getLogger("komposit.guidewire.controller");
root.setLevel(Level.ERROR);
controller.setLevel(Level.ERROR);
log.error("set logging to warn before every test in this suite");
}
@ClassRule
public static ExternalResource testRule = new ExternalResource() {
@Override
protected void before() throws Throwable {
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Logger controller = (Logger) LoggerFactory.getLogger("komposit.guidewire.controller");
root.setLevel(Level.ERROR);
controller.setLevel(Level.ERROR);
log.error("set logging to error with a custom rule");
};
@Override
protected void after() {
log.error("after finishing a test logging is still on error");
};
};
}