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 avant AddLinkEndpointMvcTest 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?
InformationsquelleAutor Ayub Malik | 2013-09-19