Тест Junit для чтения из JsonNode

#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.