5

我正在尝试使用 junit 测试我的应用程序。

因此我设置了以下类:

@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

}

所以问题是,我的调度程序 servlet 似乎无法向我的任何控制器发送任何请求。

我认为配置有一些东西 - contextConfigurationLocation。看起来他可以找到文件(否则会抛出异常),但没有加载任何配置

记录器说:

org.springframework.web.servlet.PageNotFound - 没有找到带有 URI [http://localhost:8080/myapp/abc] 的 HTTP 请求的映射

但我完全不知道出了什么问题......

我将不胜感激任何帮助!

提前致谢

4

2 回答 2

1

地雷工作正常,请尝试以下调整。

  1. 如果你使用 Junit4 不需要扩展你的测试类,junit runner 应该可以解决问题
  2. 通过类路径加载上下文配置,并确保可从测试类路径访问

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

  3. 然后只需测试带注释的控制器。我这样做:

    @测试
    @Transactional
    公共无效 testAnnotatedListUser() 抛出异常 {
        MockHttpServletRequest 请求 = 新的 MockHttpServletRequest();
        MockHttpServletResponse 响应 = 新的 MockHttpServletResponse();
        AnnotationMethodHandlerAdapter handlerAdpt = new AnnotationMethodHandlerAdapter();
        request.setRequestURI("/you/URIhere");
        ModelAndView mav = handlerAdpt.handle(request, response, this.controller);
        assertEquals("返回的视图名称不正确", "myexpectedviewname", mav.getViewName());
    }

于 2011-11-08T15:40:24.700 回答
0

我的问题有几个问题:

起初,不可能扩展 AbstractJUnit4SpringContextTests 并使用 @RunWith(...),因为它是相同的。

其次,您不应该使用 dispatcherServlert,而是通过在 application.xml 中定义处理程序并通过 @Autowire 私有处理程序处理程序在测试用例中自动装配它来使用处理程序...

那么一切都应该正常工作!

于 2011-11-09T14:12:58.723 回答