Хранение / протоколирование / печать всех ошибок, собранных errorcollector

#java #junit #errorcollector

#java #junit #errorcollector

Вопрос:

Я использую правило ErrorCollector для сбора неудачных тестовых примеров с кодом, который выглядит примерно так :

 @Rule
ErrorCollector collector = new ErrorCollector();

Map<X, Y> inputOutputMap = new HashMap<X,Y>();
inputOutputMap.add(new X("Input"), new Y("Output"));

//Mocking service layers and returning expected outputs.

for(Entry<X,Y> entry : inputOutputMap.entrySet()){

     String url = "/do/something"        

     Gson gson = new Gson();
     String json = gson.toJson();

    try{
    this.mockMvc.perform(get(url)
                .contentType(MediaType.APPLICATION_JSON)
                .content(json)).andExpect(status().isInternalServerError());
    } catch(Exception e) {
        collector.checkThat(e.getMessage, entry.getValue().getMessage());
    } 

}
  

Итак, моя проблема в том, что после сбора всех ошибок есть ли способ, которым я могу распечатать все ошибки, а также то, как я пишу тестовые примеры, это способ записи — итерация карты и проверка вывода для соответствующего ввода?

Комментарии:

1. Чтобы ответить на вашу вторую часть («это правильный путь»), я предлагаю вам добавить комментарий к checkThat , который дает информацию о entry сбое. В противном случае, если один из 1000 завершился ошибкой, и более одного из них имеют одинаковое сообщение о результате, вы не будете знать, какой сбой произошел.

2. Каким образом вы хотите, чтобы print они отличались от того, что JUnit выполняется по умолчанию? JUnit Отчет предоставляет вам информацию о каждом сбое в ErrorCollector .

3. Дело в том, что я изучил внутреннюю функциональность ErrorCollector. В основном он использует ArrayList из Throwable и добавляет ошибку, которая возникает при утверждении ожидаемого и значения, которое мы получаем в качестве ответа. Но мы не можем выполнить итерацию ArrayList .. его private без геттеров. Итак, по сути, я создал свой собственный ErrorCollector с получателем ошибок, а затем я мог бы печатать их на консоли или записывать их в файл вместе с некоторыми другими функциями, которые мне требовались для контекста моего проекта.

Ответ №1:

Вы могли бы расширить ErrorCollector и verify обнародовать. Затем вызовите его и поймайте MultipleFailureException . Из этого получаем Throwables виа getFailures .

Ошибки при получении

Это, вероятно, лучше, чем повторная реализация ErrorCollector с нуля.