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, поэтому я ожидал, что он запустит метод без проблем, хотя, похоже, это не так. не запускать метод вообще. Если это действительно не тестируемый код, то я представляю, что если я заменил этот статический метод на нестатический, тогда мне было бы хорошо пойти? Спасибо сейчас