Я пытаюсь запустить модульный тест Spring Boot на уровне контроллера с Mock для моей зависимости уровня обслуживания.Однако для этого Mock требуется зависимость от репозитория в нисходящем направлении, которая использует объект EntityManager
, что приводит к сбою моего теста при загрузке ApplicationContext
.
Мой тест не включает зависимость от репозитория или EntityManager
, он использует объект службы Mocked для возврата готового ответа.Почему Spring жалуется на репо / EntityManager
, если я хочу только смоделировать объект уровня сервиса?
Тестовый код модуля контроллера:
@RunWith(SpringRunner.class)
@WebMvcTest
@AutoConfigureWebClient
public class MobileWearControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
UserDeviceService userDeviceService;
//.....
}
Код UserDeviceService:
@Service
public class UserDeviceService {
private UserDeviceRepository userDeviceRepository;
public UserDeviceService(UserDeviceRepository userDeviceRepository) {
this.userDeviceRepository = userDeviceRepository;
}
//....
}
Код UserDeviceRepository:
@Repository
public class UserDeviceRepositoryImpl implements UserDeviceRepositoryCustom {
@PersistenceContext
private EntityManager em;
//....
}
Ожидается выполнение теста.
Фактический результат - получение следующей трассировки стека:
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDeviceRepositoryImpl': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available
...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available
...