Question

Je suis en train de tester mon application avec JUnit.

Par conséquent je configurer ai la classe suivante:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/META-INF/spring/applicationContext-test.xml" )
@TransactionConfiguration
@Transactional
public class DispatcherServletTest extends AbstractJUnit4SpringContextTests {

    private MockHttpServletRequest request;
    private MockHttpServletResponse response;

    private DispatcherServlet dispatcher;

    @Before
    public void setUp() throws Exception {
            request = new MockHttpServletRequest();
            response = new MockHttpServletResponse();

            MockServletConfig config = new MockServletConfig("myapp");
            config.addInitParameter("contextConfigLocation","classpath*:webmvc-config.xml");

            dispatcher = new DispatcherServlet();
            dispatcher.init(config);
    }
    //test cases

}

Le problème est qu'il semble que mon servlet répartiteur ne peut pas envoyer une demande à l'un de mes contrôleurs.

Je pense qu'il ya quelque chose avec la configuration - contextConfigurationLocation. On dirait qu'il peut trouver le fichier (sinon il jetterait une exception), mais ne charge pas la configuration tout

L'enregistreur dit:

org.springframework.web.servlet.PageNotFound - Aucun mappage trouvé pour requête HTTP avec l'URI [http: // localhost: 8080 / myapp / abc]

Mais je n'ai absolument aucune idée de ce qui ne va pas ...

J'apprécierait toute aide!

Merci à l'avance

Était-ce utile?

La solution

Mines fonctionnent très bien, essayez les réglages suivants.

  1. si vous utilisez junit4 pas besoin de vous étendre la classe de test, le coureur de JUnit devrait faire l'affaire
  2. Charger la config de contexte via classpath, et assurez-vous est accessible depuis le test classpath

    @ContextConfiguration (emplacements = { "classpath: applicationContext-test.xml"})

  3. puis testez juste les contrôleurs annotés. Je le fais comme ceci:

    @Test
    @Transactional
    public void testAnnotatedListUser() throws Exception {
        MockHttpServletRequest request = new MockHttpServletRequest();
        MockHttpServletResponse response = new MockHttpServletResponse();
        AnnotationMethodHandlerAdapter handlerAdpt = new AnnotationMethodHandlerAdapter();
        request.setRequestURI("/you/URIhere");
        ModelAndView mav = handlerAdpt.handle(request, response, this.controller);
        assertEquals("Incorrect view name returned", "myexpectedviewname", mav.getViewName());
    }

Autres conseils

Il y a plusieurs problèmes dans ma question:

Dans un premier temps, il est possible d'étendre la AbstractJUnit4SpringContextTests et l'utilisation @RunWith (...), parce qu'il est le même.

Au deuxième, vous ne devriez pas utiliser le dispatcherServlert, mais un gestionnaire en définissant le gestionnaire en vous application.xml et Autowiring dans le cas de test via gestionnaire @Autowire privé gestionnaire ...

Alors tout devrait bien fonctionner!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top