我想在我的MVC WebApp上开始使用集成测试,但是我不能对Dao层使用依赖注入。
我的Web应用程序仅使用Java类进行配置(基于Java的配置为100%)。这些是用于配置和启动应用程序的三个类:
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 {
....
}
}
现在,如果我尝试测试应用程序上下文的创建,则没有问题,测试正常:
@SpringJUnitConfig(HibernateJpaConfig.class)
public class UtenteDaoTest {
@Autowired
private ApplicationContext appContext;
//@Autowired
//public IUtenteDAO utenteDao;
@Test
void givenAppContext_WhenInjected_ThenItShouldNotBeNull() {
Assertions.assertNotNull(appContext);
}
但是,如果我只注释掉Dao类的注入,则例外是这样:
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。
我接受了它,但是我找不到实现目标的方法,所以我问是否有人在同一案例中找到自己,以及他们是否找到了一种使用Depency Injection(@Autowired)测试Dao和Service层的标准解决方案
谢谢 我可以提供更多详细信息