Как при тестировании одного метода вызвать внутри другой метод
Есть конвертер из сущности в бизнес-объект. В момент конвертации, внутри метода для дозаполнения недостающих полей по id, полученному из бизнес-объекта, запрашивается сущность TaskTypeEntity методом taskTypeEntityRepository.get(valueObject.getId()).
@Component
public class TaskTypeConverter implements Converter<TaskTypeEntity, TaskType> {
@Autowired
private Repository<Long, TaskTypeEntity> taskTypeEntityRepository;
@Override
public TaskTypeEntity toEntity(TaskType valueObject) {
if (valueObject == null)
return null;
else {
TaskTypeEntity taskTypeEntity = taskTypeEntityRepository.get(valueObject.getId());
return new TaskTypeEntity(
valueObject.getId(),
taskTypeEntity.getProject_id(),
valueObject.getWorkFlow().getId(),
valueObject.getName());
}
}
}
Можно ли и если да, то как реализовать тестирование метода toEntity()?
Ведь для полноценного теста надо внутри тестируемого метода toEntity(), через вызов taskTypeEntityRepository.get(valueObject.getId()), получить сущность TaskTypeEntity.
То есть, в момент выполнения toEntity() надо определить, что вызывается taskTypeEntityRepository.get(valueObject.getId()) и подсунуть сущность TaskTypeEntity.
@SpringBootTest
class TaskTypeConverterTest {
@Autowired
private Converter<TaskTypeEntity, TaskType> converter;
@Test
void toEntity() {
// здесь реализация теста
}
}
Ответы (1 шт):
Можно, вам нужно замокать зависимость Repository
Должно получиться что-то вроде этого:
@SpringBootTest
class TaskTypeConverterTest {
@Autowired
private Converter<TaskTypeEntity, TaskType> converter;
@MockBean
Repository<Long, TaskTypeEntity> repositoryMock;
@Test
void toEntity() {
TaskTypeEntity taskEntityFake = // создаете ваш объект у которого будет project_id = 100500
Mockito.when(repositoryMock.get(123)).thenReturn(taskEntityFake);
TaskType taskType = // создаете ваш параметр у которого будет id=123
TaskTypeEntity result = converter.toEntity(taskType);
Assert.assertEquals(100500, result.getProject_id());
}
}