如何使用MockMvc访问DispatcherServlet?

时间:2019-05-28 14:19:42

标签: junit4 spring-test

我有一个基本的SpringMVC应用程序,可以正常运行(和映射)。 现在,我想用MockMvc设置我的UnitTest来执行获取请求和东西。 但是,如果我运行测试,则会出现AssertionError“预期状态:<200>,但实际上是:<404>”,并且我的控制台发出警告“在名称为“''的DispatcherServlet中找不到URI [/]的HTTP请求的映射。 我感到我的MockMvc无法与DispatcherServlet通信,那么如何定义此连接?

这是我的短期考试:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration
public class HomeControllerTest {

  private MockMvc mvc;
  @Autowired
  private WebApplicationContext wac;

  @Before
  public void setup() throws ServletException {
    mvc = MockMvcBuilders.webAppContextSetup(wac).build();
  }

  @Test
  public void testLandingPagePath() throws Exception {
    mvc.perform(get("/")).andExpect(status().isOk());
  }
}

因此,我希望MockMvc在默认情况下能够获取DispatcherServlet的位置。但这实际上并没有将其称为映射。

我的“ web.xml”和“ dispatcher-servlet.xml”位于“ WEB-INF”文件夹中,没有定义任何额外的配置。

我感觉到问题出在我的项目结构上,但这是一个基本的日食“动态Web应用程序”,测试位于“ src / test / java”中,与“ src / main / java”平行

我非常感谢您的帮助,因为我花了最后2个小时来阅读解决方案,但没有找到窍门。

1 个答案:

答案 0 :(得分:0)

再过一段时间后,我现在明白了: 我仍然无法访问WEB-INF文件夹中的dispatcher-servlet.xml。我在测试包中与“控制器”测试包并行添加了一个新的“ config”包,并在其中放置了一个dispatcher-servlet.xml副本,称为“ test-dispatcher-servlet.xml”。

现在我的测试班级可以通过

进行访问
@ContextConfiguration("../config/test-dispatcher-servlet.xml")
public class HomeControllerTest {

希望这可以帮助其他从Spring MVC测试开始的人:-)