издевательство над объектом Джексона, используемым локально в методе

#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 в свой класс.

Идея заключается в том, что создание объекта для зависимостей не является обязанностью бизнес-класса.