Как провести модульное тестирование службы отдыха с использованием Mockito Hamcrest - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в модульном тестировании 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}>
...