Mockito 2.19.0 - Null возвращается при использовании статического метода в тестируемом методе класса, который нельзя проверить с помощью Mockito?

Я довольно новичок в том, что Mockito просмотрел их официальную документацию и пару онлайн-уроков по написанию тестов, поэтому я, вероятно, чего-то упускаю, когда получаю ноль, возвращаемый статическим методом, который я вызываю внутри метод тестируемого класса обслуживания. Я использую Mockito 2.19.0 с assertJ 3.10.0 и тестируемый метод таков:

public Fruit saveFruit(Fruit fruit) {
    final String name = fruit.getName().toLowerCase();
    Optional<Fruit> fruitOptional = fruitRepository.findOneByName(name);
    if (!fruitOptional.isPresent()) {
        Fruit newFruit = userDeviceRepository.save(Builder.buildFruitNew(fruit));
        LOG.info("saveFruit\t\t->\Fruit saved, {}", newFruit);
        return newFruit;
    } else {
        LOG.info("saveFruit\t\t->\tFruit already exists, updating existing fruit");
        Fruit updatedFruit = fruitOptional.map(Builder::buildFruitGet).get();
        updatedFruit.setFruitType(fruit.getFruitType());
        return fruitRepository.save(updatedFruit);
    }
}

Метод теста, который я пытался написать:

@ExtendWith(MockitoExtension.class)
class UserDeviceServiceTest {

   @Mock
   private FruitRepository fruitRepository;

   @InjectMocks
   private FruitServiceImpl fruitServiceImpl;

   @Test
   public void whenSavingNewFruitItShouldReturnTheSavedFruit() {
       Fruit newFruit = new Fruit("Lemon", "Yellow");

       // Given that a new fruit is saved and returns the new fruit
       given(fruitRepository.save(newFruit)).willReturn(newFruit);

       // When saving a new fruit
       assertThat(fruitServiceImpl.saveFruit(newFruit))

       // Then it should return the new fruit
       .isSameAs(newFruit);
    }
}

При выполнении теста я получаю следующее сообщение об ошибке:

java.lang.AssertionError: 
Expecting:
 <com.fruits.domain.models.Fruit@3bf20acd>
and actual:
 <null>
to refer to the same object

РЕДАКТИРОВАТЬ: Добавлен метод, который я вызываю в классе Builder:

public static Fruit buildFruitNew(Fruit fruit) {
    return new Fruit(fruit.getId(), fruit.getType());
}

Мне кажется, что проблема заключается в строке, где я вызываю класс Builder, который содержит статические методы, которые возвращают новый экземплярный фруктовый объект, который посмотрел на стандартный вывод, чтобы потом увидеть строку регистратора, которая, безусловно, сообщает о нулевом объекте. Я прочитал здесь и упомянул PowerMock и JMockit, возможно, для тестирования, такого как класс, поэтому я предполагаю, что в данный момент невозможно протестировать этот метод из-за статического метода, который он использует внутри? Для факта, что я уже написал модульные тесты для класса Builder, я знаю, что используемый здесь метод возвращает объект fruit с деталями этого переданного объекта fruit, поэтому я ожидал, что он запустит метод без проблем, хотя, похоже, это не так. не запускать метод вообще. Если это действительно не тестируемый код, то я представляю, что если я заменил этот статический метод на нестатический, тогда мне было бы хорошо пойти? Спасибо сейчас

0 ответов

Другие вопросы по тегам