В настоящее время я пишу тестовый пример JUnit для контроллера в моем приложении, которое возвращает объект (URL). Я пытаюсь утверждать, что ожидаемый и фактический URL совпадают. Когда я проверяю результат MvcResult, происходит 2 вещи:
mockResponse имеет код состояния 200.
В ModelAndView модель имеет ожидаемое значение URL, но когда я пытаюсь подтвердить результат с помощью result.getResponse().getContentAsString()
,
утверждение не выполняется, так как результат пуст.
Что я уже пробовал:
Во время отладки я вижу, как элемент управления перемещается в службу, что означает, что значения были должным образом смоделированы и ожидаемый URL-адрес был возвращен результату (как он присутствовал в ModelAndView при проверке).
Я попытался дать ожидаемый URL-адрес в виде объекта json, использовал средство отображения объектов для его чтения, а затем попытался выполнить JSONAssert, но результат все еще пуст.
@RunWith(SpringJUnit4ClassRunner.class)
public class StudentControllerTest {
private static final String CACHE_URL= "cacheurl";
@Mock
StudentCacheService studentCacheService;
@InjectMocks
StudentCacheController studentCacheController;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.standaloneSetup(studentCacheController).build();
}
@Test
public void testGetScoresUrl() throws Exception {
Mockito.when(studentCacheService.getStudentUrl("123", "science"))
.thenReturn(new StudentUrl(CACHE_URL));
MvcResult result = this.mockMvc.perform(MockMvcRequestBuilders.get("/student/123/scores")
.header("subject", "science").contentType(MediaType.APPLICATION_JSON)).andExpect(status().is2xxSuccessful())
.andReturn();
Assert.assertEquals(CACHE_URL, result.getResponse().getContentAsString());
}
}
Мой класс контроллера выглядит следующим образом:
@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);
}
}
Ответ следующий:
MockHttpServletResponse:
Status = 200
Error message = null
Forwarded URL = student/123/scores
Included URL = []
ModelAndView:
model = ModelMap
key = studentUrl
value = StudentUrl
url = "cacheurl"
Я получаю эту ошибку: org.junit.ComparisonFailure: expected:<[cacheurl]> but was:<[]>
Любая помощь приветствуется. Спасибо!