#java #spring-boot #unit-testing #junit #mockito
#java #весенняя загрузка #модульное тестирование #junit #mockito
Вопрос:
У меня есть код, в котором я считываю json из текстового файла с помощью JsonNode
//inside class
@Mock ObjectMapper objectMapper;
//inside method
byte[] byte = Files.readAllBytes(Paths.get(abc.txt));
JsonNode jsonNode= objectMapper.readValue(byte,JsonNode.class);
JsonNode node = jsonNode.path("id");
ниже приведена структура json в файле в виде:
{ "id" :
{
"firstName": "something",
"lastName" : "something"
}
}
Я хочу, чтобы модульный тестовый код для этого блока выглядел так
Я очень новичок в тестировании Junit
Ответ №1:
Для создания JsonNode вы можете использовать
String jsonString = "{ "id" : n"
" {n"
" "firstName": "something",n"
" "lastName" : "something"n"
" }n"
"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
и после этого вы можете легко имитировать поведение mapper, используя
when(objectMapper.readValue(any(), any())).thenReturn(node);
Ответ №2:
Используйте Mockito для моделирования поведения объекта Mapper, что-то вроде
when(objectMapper.readValue(any(), any())).thenReturn(your expected value);
Таким образом, по сути, вы имитируете поведение зависимых классов и проверяете поведение тестового класса.
Это должно помочь — https://www.vogella.com/tutorials/Mockito/article.html
Комментарии:
1. Я попытался издеваться над ObjectMapper с помощью when, но как вернуть объект JsonNode. Как создать объект JsonNode?
2. JsonNode — это абстрактный класс, вы также должны издеваться над его поведением.
3. когда я отлаживаю это, в качестве теста появляется такая строка «JsonNode JsonNode= ObjectMapper.readValue(байт,JsonNode.class )»; JsonNode показывает значение null.