Printemps MockMvc WebApplicationContext est null lors de l'exécution de Tests JUnit avec Maven
J'ai un Printemps maquette mvc de test JUnit classe qui contient deux tests. Lorsque j'exécute les tests au sein d'Eclipse IDE les deux tests passent (j'utilise Eclipse plugin Maven).
Lors de l'exécution de tests à partir de la ligne de commande à l'aide de
mvn test
l'un des tests échoue parce que le WebApplicationContext c'est @Autocâblés est parfois null.
Voici ma classe de test
@WebAppConfiguration
@ActiveProfiles({ "dev", "test" })
public class AddLinkEndpointMvcTest extends BaseMvc {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void before() {
System.out.println("WAC = " + wac);
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void addLinkDoesNotSupportGet() throws Exception {
mockMvc.perform(get("/myurl")).andExpect(status().is(HttpStatus.SC_METHOD_NOT_ALLOWED));
}
@Test
public void addLinkBadRequestNoLinkAddress() throws Exception {
mockMvc.perform(post("/myurl")).andExpect(status().is(HttpStatus.SC_BAD_REQUEST));
}
}
Ici est la BaseMvc classe
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class BaseMvc {
@Configuration
@ComponentScan(basePackages = { "com.example.a", "com.example.b" })
@Profile("test")
public static class TestConfig {
static {
System.out.println("TEST CONFIG");
}
//...some beans defined here
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setIgnoreUnresolvablePlaceholders(false);
configurer.setLocations(new Resource[] { new ClassPathResource("sample-webapp.properties"),
new ClassPathResource("sample-domain.properties") });
return configurer;
}
}
}
J'ai ajouté la println appels à l'aide de débogage. Lors de l'exécution de mvn test voici la sortie de la console:
WAC = null
WAC = org.springframework.web.context.support.GenericWebApplicationContext@38795184: startup date [Thu Sep 19 16:24:22 BST 2013]; root of context hierarchy
et l'erreur
java.lang.IllegalArgumentException: WebApplicationContext is required
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder.<init>(DefaultMockMvcBuilder.java:66)
at org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup(MockMvcBuilders.java:46)
at com.mypackage.AddLinkEndpointMvcTest.before(AddLinkEndpointMvcTest.java:31)
Donc, c'est le problème de la ligne dans le test
@Autowired
private WebApplicationContext wac;
Parfois wac a la valeur null ou n'a pas terminé l'initialisation avant la JUnit @Avant de coups de pied dans.
Ce que je ne comprends pas, c'est la WebApplicationContext est parfois nulle et pourquoi il passe à l'IDE Eclipse!
- Je n'arrive pas à reproduire ton erreur. Êtes-vous sûr que c'est la classe impliquée?
- Avez-vous essayé d'utiliser le constructeur de l'injection à la place du champ de l'injection? Cela devrait forcer votre
WebApplicationContext
être initialisée avantAddLinkEndpointMvcTest
est utilisé. - Oui essayé de nouveau aujourd'hui, après un certain temps, et toujours même problème
- Pourriez-vous essayer
@RunWith(SpringRunner.class)
coureur?
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser getBean au lieu de l'auto de câblage. Cela devrait s'assurer que
WebApplicationContext
est initialisé lorsque vous y accédez.Exemple:
Veuillez utiliser @WebAppConfiguration annotation. Votre question est déjà répondu ici : WebApplicationContext n'est pas autowire