Я хотел бы начать использовать интеграционный тест в своем MVC WebApp, но я не могу использовать внедрение зависимостей для слоя Dao.
Мое веб-приложение настроено с использованием только классов Java для конфигурации (100% -ная конфигурация на основе Java). Это три класса, используемые для настройки и запуска приложения:
HibernateJpaConfig (для конфигурации постоянства, очевидно)
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({"it.perk.service"})
@ComponentScan({"it.perk.model.dao"})
public class HibernateJpaConfig {
}
SpringWebConfig (для конфигурации WebMVC)
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "it.perk.fenix.controller")
@ComponentScan(basePackages = "it.perk.fenix.provider")
public class SpringWebConfig {
}
WebAppInitializer (для настройки ServletContext)
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) throws ServletException {
....
}
}
Теперь, если я пытаюсь протестировать создание контекста моего приложения, у меня нет проблем, Test is OK:
@SpringJUnitConfig(HibernateJpaConfig.class)
public class UtenteDaoTest {
@Autowired
private ApplicationContext appContext;
//@Autowired
//public IUtenteDAO utenteDao;
@Test
void givenAppContext_WhenInjected_ThenItShouldNotBeNull() {
Assertions.assertNotNull(appContext);
}
Но если я раскомментирую только инъекцию класса Дао, исключение будет таким:
04:21:05.732 ERROR TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@2e4b8173] to prepare test instance [it.perk.fenix.test.model.dao.impl.UtenteDaoTest@78d6447a]
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'it.perk.fenix.test.model.dao.impl.UtenteDaoTest': Unsatisfied dependency expressed through field 'utenteDao'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'it.perk.fenix.model.dao.IUtenteDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Перед написанием я исследовал возможную проблему, и кажется, что я не могу повторно использовать способ создания ServletContext для моих целей тестирования source .
Я принял это, но не могу найти способ достичь своей цели, поэтому я спрашиваю, попал ли кто-нибудь в мой же случай и нашел ли он стандартное решение для тестирования слоев Dao и Service с помощью Depency Injection (@Autowired) .
спасибо
Я доступен для более подробной информации