2013-04-22 3 views
2

Я использую конфигурацию на основе Java в веб-приложении:контекст весна Тестирование без XML

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

дополнительное замечание: были некоторые ответы с советами, как создать еще один контекст, основанный на одном классе конфигурации. Я не могу этого сделать, потому что я точно настраиваю созданный контекст (добавляя некоторые свойства). Я только что добавил код

+0

Нужно уточнить, вы хотите узнать, как проверить свой класс 'SpringInitializer'? или вы хотите узнать, как загрузить '@ ContextConfiguration' для тестирования с помощью java config? – Akshay

+0

нет, я хочу проверить мое дао. но я строю свой контекст вручную – piotrek

ответ

3

Я думаю, что это ответ на ваш вопрос: https://jira.springsource.org/browse/SPR-10199?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

В одном слове: То, что вы хотите сделать, это пока не возможно. Тоже самое. Я использую WebApplicationInitializer, чтобы использовать CustomBeanFactory и добиваться ввода данных в журнал. Но теперь я не могу ввести эти журналы в мои тестовые объекты.

0

Это сообщение в блоге должно отвечать на ваш вопрос почти точно (я просто надеюсь, что вы используете Spring 3.1).

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

Выделите интеграционное тестирование в с @Configuration классами части

Надежда, которая решает вашу проблему.

+0

Я только что обновил свой вопрос. в этой статье нет решения – piotrek

+0

Теперь я не понимаю ваш вопрос. Вы говорите, что хотите провести единичный тест или проверить свой dao; но вы также хотите загрузить весь контекст? Разве вы не должны загружать только то, что хотите проверить и проверить? – Akshay

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

} 
+0

Я только что обновил свой вопрос (извините за то, что не был более конкретным). Я не могу использовать это решение, потому что он не позволяет мне настроить контекст – piotrek

Смежные вопросы