MvcResult的状态为200,包括响应内容,但断言失败。

7 浏览
0 Comments

MvcResult的状态为200,包括响应内容,但断言失败。

我目前正在为应用程序中的控制器编写一个JUnit测试用例,该控制器返回一个对象(URL)。我正在尝试断言预期的URL和实际的URL是否相同。当我检查MvcResult结果时,有两件事发生:\n

    \n

  1. mockResponse的状态码为200。
  2. \n

  3. 在ModelAndView中,模型确实有预期的url值,但是当我尝试使用result.getResponse().getContentAsString()断言结果时,断言失败,因为结果为空。
  4. \n

\n我已经尝试过的:\n

    \n

  1. 在调试过程中,我看到控制权转移到了服务上,这意味着值被正确模拟,并且预期的URL在结果中返回(因为在检查ModelAndView时存在)。
  2. \n

  3. 我尝试将预期的URL作为JSON对象给出,使用对象映射器来读取它,然后尝试使用JSONAssert,但结果仍然为空。
  4. \n

\n我的控制器类如下:\n

@Controller
@RequestMapping("/student")
public class StudentCacheController {
   @Autowired
   StudentCacheService studentCacheService;
   @GetMapping(path = "/{studentId}/scores",produces = MediaType.APPLICATION_JSON_VALUE)
   public StudentUrl getScores(@PathVariable String studentId, @RequestHeader(value = "subject", required = true) String subject) throws Exception {
    return studentCacheService.getStudentUrl(studentId, subject);
 }
}

\n响应如下:\n

MockHttpServletResponse:
      Status = 200
      Error message = null
      Forwarded URL = student/123/scores
      Included URL = []
ModelAndView:
      model = ModelMap
        key = studentUrl
        value = StudentUrl
           url = "cacheurl" 

\n我收到了这个错误:org.junit.ComparisonFailure: expected:<[cacheurl]> but was:<[]>\n如果有帮助,感谢!谢谢!

0