如何使用Mockito Hamcrest单元测试Rest Service

时间:2018-10-29 11:14:57

标签: json junit mocking mockito hamcrest

我不熟悉使用Mockito进行单元测试Rest Services。我想从基本测试开始,看来有太多测试json的方法。 我想测试“ isOK”,并期望匹配大小。在这种情况下,2是因为该服务仅返回2个值。

我的休息服务端点是get / person / {state}: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}>

0 个答案:

没有答案