我有以下代码:
@Component
@Slf4j
public class MyClass {
private OtherClass otherClass;
@Autowired
public MyClass(OtherClass otherClass) {
this.otherClass = otherClass;
}
public void start() {
try {
otherClass.execute();
} catch (FeatureException exception) {
log.warn(exception.getMessage());
}
}
我想测试验证日志消息。 我不知道怎么做。
由于
答案 0 :(得分:1)
此用例的SLF4J project recommends using库SLF4J Test。
在你的情况下(使用Hamcrest和Mockito):
public class MyClassTest {
TestLogger logger = TestLoggerFactory.getTestLogger(MyClass.class);
@Test
public void testStart_loggingFailureMessage() {
OtherClass otherClass = mock(OtherClass.class);
MyClass myClass = new MyClass(otherClass);
when(otherClass.execute()).thenThrow(new FeatureException("Some text"));
myClass.start();
assertThat(logger.getLoggingEvents(), is(asList(LoggingEvent.warn("Some text"))));
}
@After
public void clearLoggers() {
TestLoggerFactory.clear();
}
}
答案 1 :(得分:0)
如果其他解决方案不适合您,另一个选择:您可以验证otherClass.execute()
抛出的异常
A)看到对getMessage()
B)被捕获(您可以编写一个抛出运行时异常的测试,您可能会遇到测试用例;以及第二个抛出FeatureException的测试...显然不应该进入测试用例)