我有这个restcontroller返回分页项目:
@GetMapping("/api/items")
public Page<Item> getPagedItems(Pageable pageable, @RequestParam(defaultValue="") String searchBy,
@RequestParam(defaultValue="") String searchValue) {
Page<Item> pageItem;
switch (searchBy) {
case "name" :
pageItem = itemRepository.findByNameStartingWith(searchValue, pageable);
break;
case "description" :
pageItem = itemRepository.findByDescriptionStartingWith(searchValue, pageable);
break;
default:
pageItem = itemRepository.findAll(pageable);
break;
}
return pageItem;
}
到目前为止,我的MvcTest看起来像这样:
@Test
public void testGetItems() throws Exception{
Page<Item> itemPage = itemRepository.findAll(PageRequest.of(0, 20));
given(itemRepository.findAll(PageRequest.of(0, 20))).willReturn(itemPage)
this.mvc.perform(get("/api/items")
.contentType(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$",hasSize(1)));
}
我想要这个/ api / items请求的内容 . 它正在回归
java.lang.AssertionError:在org.springframework.test.util.JsonPathExpectationsHelper.assertValue(JsonPathExpectationsHelper.java)的org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:290)的JSON路径“$”处没有值:74)org.springframework.test.web.servlet.result.JsonPathResultMatchers.lambda $ value $ 0(JsonPathResultMatchers.java:87)org.springframework.test.web.servlet.MockMvc $ 1.andExpect(MockMvc.java:179 at at.refrocurement.ItemRestMvcTest.testGetItems(ItemRestMvcTest.java:60)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown)来自org.junit.runners.model.ReflectiveCallable.run的org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)的java.lang.reflect.Method.invoke(未知来源) (ReflectiveCallable.java:12)org.junit.runners.model.Framework在org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks)的org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)中的Method.invokeExplosively(FrameworkMethod.java:47) . java:73)org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)在org.jun上的org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) .runners.ParentRunner.runLeaf(ParentRunner.java:325)org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)org.springframework.test.context.junit4.SpringJUnit4ClassRunn er.runChild(SpringJUnit4ClassRunner.java:97)org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290)org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71)org.junit .runners.ParentRunner.runChildren(ParentRunner.java:288)在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58)org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268)at at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)位于org.junit的org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) . runners.ParentRunner.run(ParentRunner.java:363)位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run的org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) JUnit4TestReference.java:86)org.eclipse.jdt.inter上的org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) nal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)位于org.eclipse.jdt.internal.junit的org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760) . orm.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)中的runner.RemoteTestRunner.run(RemoteTestRunner.java:460)引起:java.lang.IllegalArgumentException:json不能为null或者在com.jayway.jsonpath.JonPath.JsonPath.read(com.jayway.jsonpath.JsonPath.read)上的com.jayway.jsonpath.internal.Utils.notEmpty(Utils.java:386)处于com.jayway.jsonpath.JsonPath.read(JsonPath.java:342) . java:329)at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:287)... 35更多
我该怎么做才能使这项测试工作?什么似乎是问题?
如果它也有帮助我也使用Spring Security . 我用@WithMockUser(roles =“ADMIN”)注释了测试类 .
1 回答
当您返回
Page<Item>
作为响应时,响应JSON将类似于:所以,你的断言路径应该是 $.content ,如
.andExpect(jsonPath("$.content",hasSize(1)));