在Junit中,如何防止打印故意抛出并在日志中捕获的预期异常?

时间:2017-02-08 20:19:07

标签: java logging junit log4j logback

我猜这是一个junit和Logback问题。在我的项目中,Logging是通过slf4j完成的。日志记录实现是Logback。

所以我有一个班级:

@Component
@Slf4j
public class A {
    private final ObjectMapper objectMapper = new ObjectMapper();

    private static final String DEFAULT_REPLY = "just continue...";

    public String doSomething(Object value) {
        try {
            return objectMapper.methodAbc(value);
        } catch (JPException e) {
            log.error("Exception while processing value", e);
            return DEFAULT_REPLY;
        }
    }
}

及其测试类

@RunWith(MockitoJUnitRunner.class)
public class ATest {
    @Before
    public void init() {
        processor = new A();
    }

    @Test
    public void test() throws Exception {
        ObjectMapper mockMapper = mock(ObjectMapper.class);
        JP mockJp = mock(JP.class);
        Exception thrownException = new JPException(mockJp, null);

        when(mockMapper.methodAbc(any())).thenThrow(thrownException);

        String result = processor.doSomething("abc");

        assertTrue(result.equals("just continue..."));
    }
}

我对测试本身没有任何问题。正如您所看到的,在测试中,JPException将在日志中打印出来,因为它是故意抛出的。

当我通过日志调试时,有太多这种预期的异常,我只是想知道有没有办法从日志中删除它们?当然,仍然会打印其他不期望的例外情况。

2 个答案:

答案 0 :(得分:0)

Logback具有支持基于特定逻辑的过滤器和评估的功能。

此链接可能是您可能正在寻找的内容:

https://logback.qos.ch/manual/layouts.html#Evaluators

您可以将logback配置为执行或不执行某项操作(如果它是任何例外情况的实例) - 在您的情况下JPException

答案 1 :(得分:-1)

试试这个:

  1. 为日志创建模拟。
  2. 将模拟器注入正在测试的类中。
  3. 断言调用了模拟日志对象的错误方法。