如何在Junit5和Spring5的测试中使用依赖注入

时间:2019-04-27 03:01:00

标签: java spring spring-mvc junit5

我想在我的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层的标准解决方案

谢谢 我可以提供更多详细信息

0 个答案:

没有答案