【问题标题】:Testing spring context without xml在没有 xml 的情况下测试 spring 上下文
【发布时间】:2013-04-22 15:29:49
【问题描述】:

我在 Web 应用程序中使用基于 java 的配置:

public class SpringInitializer implements WebApplicationInitializer {

  @Override
  public void onStartup(ServletContext servletContext) {
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.getEnvironment().getPropertySources().addLast( myMethod() );
    ctx.scan("com.xxx.xxx");

  }
}

我该如何测试它?

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(????????????)
public class PersistenceConfigurationTest {

    @PersistenceContext EntityManager entityManager;
    @Autowired DataSource dataSource;

    @Test
    public void infrastructureShouldBeAutowired() {
        assertNotNull(dataSource);
        assertNotNull(entityManager);
    }
}

补充说明: 有一些答案建议如何基于相同的配置类创建另一个上下文。我不能这样做,因为我微调了创建的上下文(添加了一些属性)。我刚刚添加了代码

【问题讨论】:

  • 需要澄清一下,您想知道如何测试您的SpringInitializer 课程吗?或者您想知道如何使用 java config 加载 @ContextConfiguration 进行测试?
  • 不,我想测试我的 dao。但我正在手动构建我的上下文

标签: java spring unit-testing testing web-applications


【解决方案1】:

我认为这将回答您的问题: https://jira.springsource.org/browse/SPR-10199?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

一句话:你想做的还不可能。同样在这里。我使用 WebApplicationInitializer 来使用 CustomBeanFactory 并实现 logger ctor 注入。但现在我无法将记录器注入到我的测试对象中。

【讨论】:

    【解决方案2】:
    @Configuration
    @ComponentScan("com.xxx.xxx")
    public class Config {}
    
    public class SpringInitializer implements WebApplicationInitializer {
    
        public void onStartup(ServletContext servletContext) throws ServletException {
            AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
            ctx.register(Config.class);
    
            // Register and map the dispatcher servlet
            ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
            dispatcher.setLoadOnStartup(1);
            dispatcher.addMapping("/");
        }
    
    }
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration(classes = {Config.class})
    public class PersistenceConfigurationTest {
    
        @PersistenceContext EntityManager entityManager;
        @Autowired DataSource dataSource;
    
        @Test
        public void infrastructureShouldBeAutowired() {
            assertNotNull(dataSource);
            assertNotNull(entityManager);
        }
    
    }
    

    【讨论】:

    • 我刚刚更新了我的问题(抱歉没有更具体)。我不能使用这个解决方案,因为它不允许我配置上下文
    【解决方案3】:

    这篇博文应该几乎准确地回答了您的问题(我只是希望您使用的是 Spring 3.1)。

    http://blog.springsource.org/2011/06/21/spring-3-1-m2-testing-with-configuration-classes-and-profiles/

    滚动到使用@Configuration 类进行集成测试部分

    希望能解决您的问题。

    【讨论】:

    • 我刚刚更新了我的问题。本文没有解决办法
    • 我现在不明白你的问题..你说你想单元测试,或者测试你的道;但您还想加载整个上下文?你不应该只加载你想测试和测试的东西吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多