我已经设置了一个Spring Boot应用程序,以使用Spring MVC控制器返回项目列表。我有一个弹簧测试,它创建了一个模拟的依赖关系,该依赖关系被连接到Controller中,并且控制器以JSON数组的形式返回了预期的模拟项的列表。
我试图断言内容是正确的。我想断言JSON数组包含预期的列表。我认为尝试将JSON数组解释为java.util.List存在问题。有没有办法做到这一点?
first和second .andExepct
()通过,但是hastItems()检查没有通过。我该怎么办,我可以只传递我的List并验证它是否包含在JSON中?我可以想到的替代方法是将JSON转换为我的List并使用“常规java junit断言”进行验证
public class StudentControllerTest extends AbstractControllerTest { @Mock private StudentRepository mStudentRepository; @InjectMocks private StudentController mStudentController; private ListmStudentList; @Before public void setUp() { MockitoAnnotations.initMocks(this); setUp(mStudentController); // mock the student repository to provide a list of 3 students. mStudentList = new ArrayList<>(); mStudentList.add(new Student("Egon Spengler", new Date(), "111-22-3333")); mStudentList.add(new Student("Peter Venkman", new Date(), "111-22-3334")); mStudentList.add(new Student("Raymond Stantz", new Date(), "111-22-3336")); mStudentList.add(new Student("Winston Zeddemore", new Date(), "111-22-3337")); when(mStudentRepository.getAllStudents()).thenReturn(mStudentList); } @Test public void listStudents() throws Exception { MvcResult result = mockMvc.perform(get("/students/list")) .andDo(print()) .andExpect(jsonPath("$", hasSize(mStudentList.size()))) .andExpect(jsonPath("$.[*].name", hasItems("Peter Venkman", "Egon Spengler", "Raymond Stantz", "Winston Zeddemore"))) // doesn't work .andExpect(jsonPath("$.[*]", hasItems(mStudentList.toArray()))) // doesn't work .andExpect(jsonPath("$.[*]", hasItems(mStudentList.get(0)))) .andExpect(status().isOk()) .andReturn(); String content = result.getResponse().getContentAsString(); }
}