3

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);
    }
}

追加の注意事項: 同じ構成クラスに基づいて別のコンテキストを作成する方法に関するアドバイスを含むいくつかの回答がありました。作成されたコンテキストを微調整する(いくつかのプロパティを追加する)ため、できません。私はちょうどコードを追加しました

4

3 に答える 3

3

これであなたの質問に答えられると思います: https://jira.springsource.org/browse/SPR-10199?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

一言で言えば、やりたいことはまだできていません。こっちも一緒。WebApplicationInitializer を使用して CustomBeanFactory を使用し、ロガーの ctor インジェクションを実現します。しかし今、そのロガーをテスト オブジェクトに挿入することができません。

于 2014-01-14T15:38:39.650 に答える
1
@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);
    }

}
于 2013-04-22T16:00:25.997 に答える
0

このブログ投稿は、あなたの質問にほぼ正確に答えるはずです (Spring 3.1 を使用していることを願っています)。

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

@Configuration Classes部分との統合テストまでスクロールします

問題が解決することを願っています。

于 2013-04-22T16:00:04.133 に答える