Spring MockMVC redirectUrlPattern抛出“无蚂蚁风格的路径模式”

时间:2019-01-22 21:52:11

标签: java pattern-matching spring-boot-test mockmvc

我见过this questionthis question。我想匹配网址格式,所以我根据这些问题的答案来编写测试。

@Autowired
private MockMvc mockMvc;

// Ant pattern, example URL: /courses/1/edit
private static final String CREATE_SUCCESS_URL = "/courses/[0-9]+/edit";
// ...
    this.mockMvc.perform(
            post("/courses/create")
                    .with(csrf())
                    .param("name", "New Course"))
            .andExpect(redirectedUrlPattern(CREATE_SUCCESS_URL));

我不确定正确的Ant模式语法,因此我也尝试过类似的变体:

  • CREATE_SUCCESS_URL = "/courses/{[0-9]+}/edit"
  • CREATE_SUCCESS_URL = "/courses/\\d+/edit"
  • CREATE_SUCCESS_URL = "/courses/\\d/edit"
  • CREATE_SUCCESS_URL = "/courses/{\\d+}/edit"
  • CREATE_SUCCESS_URL = "/courses/{id:\\d+}/edit"
  • CREATE_SUCCESS_URL = "/courses/{id:[0-9]+}/edit"

但是我总是有一个例外

java.lang.AssertionError: No Ant-style path pattern
    at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:36)
    at org.springframework.test.util.AssertionErrors.assertTrue(AssertionErrors.java:66)
    at org.springframework.test.web.servlet.result.MockMvcResultMatchers.lambda$redirectedUrlPattern$3(MockMvcResultMatchers.java:153)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:195)
    at by.naxa.stackoverflow.CoursesTest.givenNameWhenSubmitCreateCourseThenSuccess(
    ...

还有一件事。模式CREATE_SUCCESS_URL = "/courses/?/edit"可以正常运行,但是我想确保只匹配数字。

Spring Boot版本2.1.2发行。

1 个答案:

答案 0 :(得分:0)

符合您要求的有效Ant路径模式如下:

CREATE_SUCCESS_URL = "/courses/{[0-9]*}/edit"

CREATE_SUCCESS_URL = "/courses/{\\d*}/edit"

AssertionErrororg.springframework.util.AntPathMatcher内部的以下方法引起:

public boolean isPattern(String path) {
    return (path.indexOf('*') != -1 || path.indexOf('?') != -1);
}

因此,任何包含*?的字符串都可以使用。