2017-02-08 17 views
0

Я думаю, что это проблема юнита и журнала. В моем проекте ведение журнала выполняется через slf4j. Реализация журнала - это журнал.В Junit, как предотвратить печатание ожидаемого исключения, которое бросается намеренно и поймано уже в журнале?

Так у меня есть класс:

@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 будет распечатываться в журнале, потому что он намеренно брошен.

Когда я отлаживаю журналы, таких ожидаемых исключений слишком много, мне просто интересно, есть ли способ удалить их из журналов? И, конечно, по-прежнему печатать другие исключения, которые не ожидаются.

+0

Что вы используете в качестве журналиста? – davidxxx

+0

@ davidxxx, мы используем Logback. – mumofuronghua

ответ

-1

Попробуйте это:

  1. Создать макет для журнала.
  2. Инъекционный макет в тестируемый класс.
  3. Утверждение, что был вызван метод ошибки на издеваемом объекте журнала.
+0

Я немного отредактировал этот вопрос. Чтобы сделать вопрос более ясным, у меня нет никаких проблем, чтобы проверить что-либо. сам тест в порядке. Просто я не хочу, чтобы ожидаемое исключение «JPException» было распечатано в журнале. – mumofuronghua

+0

, выполняющие шаги 1 и 2 выше, предотвратят ведение журнала исключения в файле журнала. – DwB

0

Функция регистрации имеет функциональные возможности для поддержки фильтров и оценок на основе определенной логики.

Эта ссылка, вероятно, что вы могли бы искать:

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

Вы можете настроить Logback делать или не делать определенные действия, если он является экземпляром любого exceptio - в вашем случае JPException

+0

Спасибо за ссылку. Это очень полезно, и я прочитаю его. Проблема в том, что такие исключения существуют в разных типах, таких как 'IOException',' IllegalArgumentException', 'JPException' и т. Д. У меня такое чувство, что «фильтры» и «Оценщики» - это путь, там будет очень большой файл logback.xml. Есть ли способ со стороны junit, например, когда мы намеренно бросаем исключение с помощью 'thenThrow', что-то можно сделать на стороне журнала? – mumofuronghua

+0

Не знаю, помогает ли это, но делает ли аннотация «@Test (expected = JPException.class)» на вашем методе в JUnit, дайте то, что вы ищете? В этом случае, когда исключение не было выбрано, вы получите следующую ошибку: java.lang.AssertionError: Expected Exception ..... JPException'. –

+0

Это не работает в моем случае, потому что исключение попадает за пределы метода тестирования, поэтому для теста не возникает JPException. Но он работает с теми исключениями, которые возникают в методе тестирования. В любом случае, спасибо;) – mumofuronghua