我不熟悉使用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}>