Я новичок в SpringBoot, и прошло уже некоторое время с работы с SpringMVC, так что, скорее всего, я упускаю что-то очевидное.Мой тест вызывает контроллер, и контроллер выдает исключение IllegalArgumentException, как я и собирался.Тем не менее, тест не справляется с этим.Вместо этого это терпит неудачу, а не проходит, как я ожидал.Вызывая curl, я вижу ожидаемый ответ.
Мой тест:
@Test
void throwExceptionWhenMazeIsInvalid() {
def encodedMaze = java.net.URLEncoder.encode("""#
##########
""", "UTF-8")
mvc.perform(MockMvcRequestBuilders.get("/solve?maze=${encodedMaze}").accept(MediaType.APPLICATION_JSON))
.andExpect(status().is(500))
// .andDo(MockMvcResultHandlers.print())
.andExpect(content().string("The maze is improperly formatted."))
.andDo(print())
// .andReturn()
}
Мой тестируемый метод:
@RestController
class MazeController {
@RequestMapping(value = "/solve", method = RequestMethod.GET, produces = "application/json")
String solve(@RequestParam("maze") String layout){
println "MazeController.solve(${layout})"
String decoded = java.net.URLDecoder.decode(layout, "UTF-8")
if (!MazeValidator.isValid(decoded)) {
throw new IllegalArgumentException("The maze is improperly formatted.")
}
String expectedMaze = """##########
#A@@.#...#
#.#@##.#.#
#.#@##.#.#
#.#@@@@#B#
#.#.##@#@#
#....#@@@#
##########
"""
JsonBuilder json = new JsonBuilder()
// json { message decoded }
json { message expectedMaze }
println "============= RETURNING response"
return json.toString()
}
}
Мой curl:
> curl localhost:8080/solve
{"timestamp":"2018-10-24T21:45:19.025+0000","status":500,"error":"Internal Server Error","message":"The maze is improperly formatted.","path":"/solve"}