#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. Каким образом вы хотите, чтобы
JUnit
выполняется по умолчанию?JUnit
Отчет предоставляет вам информацию о каждом сбое вErrorCollector
.3. Дело в том, что я изучил внутреннюю функциональность ErrorCollector. В основном он использует ArrayList из Throwable и добавляет ошибку, которая возникает при утверждении ожидаемого и значения, которое мы получаем в качестве ответа. Но мы не можем выполнить итерацию ArrayList .. его private без геттеров. Итак, по сути, я создал свой собственный ErrorCollector с получателем ошибок, а затем я мог бы печатать их на консоли или записывать их в файл вместе с некоторыми другими функциями, которые мне требовались для контекста моего проекта.
Ответ №1:
Вы могли бы расширить ErrorCollector
и verify
обнародовать. Затем вызовите его и поймайте MultipleFailureException
. Из этого получаем Throwables
виа getFailures
.
Это, вероятно, лучше, чем повторная реализация ErrorCollector
с нуля.