Sto provando a creare i test spring-mvc utilizzando Spring 3.2.1. Seguendo alcuni tutorial, ho pensato che sarebbe stato semplice.@WebAppConfiguration non iniettato
Ecco la mia prova:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = { JpaTestConfig.class })
@WebAppConfiguration
public class HomeControllerTest {
@Resource
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Test
public void testRoot() throws Exception {
mockMvc.perform(get("/").accept(MediaType.TEXT_PLAIN)).andDo(print())
// print the request/response in the console
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.TEXT_PLAIN))
.andExpect(content().string("Hello World!"));
}
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
}
Ecco il mio pom.xml rilevanti:
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
Ho la seguente classe configurazione di prova:
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = { "com.myproject.service", "com.myproject.utility",
"com.myproject.controller" })
@ImportResource("classpath:applicationContext.xml")
public class JpaTestConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
...
}
// various other services/datasource but not controllers
}
E 'la mia comprensione che aggiungendo @WebAppConfiguration
forzerà Spring a iniettarlo. Ma quando ho eseguito questo test dall'interno di Eclipse ottengo:
causati da: org.springframework.beans.factory.NoSuchBeanDefinitionException: No fagiolo qualifica di tipo [org.springframework.web.context.WebApplicationContext] trovato per la dipendenza : atteso almeno 1 bean che si qualifica come candidato autoptico per questa dipendenza. annotazioni Dipendenza: {@ org.springframework.beans.factory.annotation.Autowired (richiesto = true)} a org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException (DefaultListableBeanFactory.java:967) a org .springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:837) a org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:749) a org.springframework.beans .factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:486)
Aggiornamento - ho dovuto cambiare la mia classe di configurazione di test Java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "...." })
@EnableTransactionManagement
@ImportResource("classpath:applicationContext.xml")
public class JpaTestConfig extends WebMvcConfigurationSupport {
Tuttavia, il problema è ora che posso chiamare il mio servizio REST, ma invoca alcuni altri servizi, tra cui chiamate al database . Qual è il modo preferito per testare la chiamata e una risposta derisoria. Vorrei testare condizioni valide e non valide.
ho i miei fagioli mappati nel @Configuration: – sonoerin
Si scopre avevo bisogno di aggiungere quanto segue alla mia prova classe di configurazione: @EnableWebMvc @ComponentScan (...) JpaTestConfig estende WebMvcConfigurationSupport – sonoerin
buona scoperta. Aggiungi questo aggiornamento alla tua domanda. Oppure prova a rispondere alla tua domanda con piccoli dettagli. –