Я новичок в модульном тестировании Rest Services с использованием Mockito. Я хочу начать с базового теста, и похоже, что существует множество способов проверить json.
Я хочу проверить 'isOK' и ожидать совпадения размеров. В этом случае 2, поскольку есть только 2 значения, возвращенные из службы.
Моей конечной точкой службы отдыха является get / person / {state}: состояние является строковым значением.
Когда я запускаю localhost: 8181 / get / person / FL, я получаю следующие данные.
This json response has 2 items, firstName and lastName.
[
{
"firstName": "John",
"lastName": "Summers"
}
]
Я добавил конструктор в TestPojo, который принимает две строки.
public TestPojo(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
Этот тест проходит правильно.
@Before
public void init(){
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders
.standaloneSetup(webController)
.build();
}
@Test
public void test_get_all_success() throws Exception {
List<TestPojo> test = Arrays.asList(
new TestPojo("John", "Summers"));
when(testServiceImpl.getByState("FL")).thenReturn(test);
mockMvc.perform(get("/get/person/{state}", "FL"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
.andExpect(jsonPath("$", hasSize(1)))
.andExpect(jsonPath("$[0].firstName", is("John")))
.andExpect(jsonPath("$[0].lastName", is("Summers")));
verify(testServiceImpl, times(1)).getByState("FL");
verifyNoMoreInteractions(testServiceImpl);
} //SUCCESS!!
Теперь я добавил дополнительные элементы в json, чтобы они возвращали успех и логические ошибки проверки, подобные этой, внутри данных.
{
"data": [
{
"firstName": "John",
"lastName": "Summers"
}
],
"status": "success",
"hasValidationError": false
}
Как мне изменить мой тест, чтобы приспособиться к новой структуре json?
java.lang.AssertionError: JSON path "$" Expected: a collection with size <2> but: was <{data=[{"firstName":"John","lastName":"Summers"}], status=success, hasValidationError=false}>