#java #junit #jackson
#java #junit #джексон
Вопрос:
У меня есть метод, который десериализует мой POJO с использованием jackson.
Мой класс выглядит следующим образом:
@Builder
public class MyCustomClass {
...
...
...
}
Мой метод декодирования выглядит примерно так:
public MyCustomClass decodeObject(String jsonString) {
ObjectMapper mapper = new ObjectMapper();
MyCustomClass object = mapper.readValue(jsonString, MyCustomClass.class);
return object;
}
Я пишу метод модульного тестирования для тестирования метода декодирования. Как я могу издеваться над объектом ObjectMapper? Я смотрел на InjectMocks, но я не был уверен, как именно это делать.
Есть ли конкретный способ сделать это с помощью InjectMocks? Кроме того, является ли InjectMocks правильным способом издевательства над локальными переменными?
Ответ №1:
измените свой класс на этот:
class MyClass{
ObjectMapper mapper;
MyClass(ObjectMapper mapper) {
this.mapper = mapper;
}
public MyCustomClass decodeObject(String jsonString) {
MyCustomClass object = mapper.readValue(jsonString, MyCustomClass.class);
return object;
}
}
затем вы можете внедрить макет object Mapper в свой класс.
Идея заключается в том, что создание объекта для зависимостей не является обязанностью бизнес-класса.