我在spring-application里面有一个restcontroller返回一个对象列表……
@GetMapping
@Override
public ResponseEntity readAll(@QuerydslPredicate(root = Entity.class) Predicate predicate, Pageable pageable){
...
}
如果我运行它,一切正常.我可以通过分页和谓词来过滤请求.但如果我运行junit测试,它就会失败……
@Test
public void readAllTest(){
MockMvcBuilders.standaloneSetup(*myController*)
.build().perform(MockMvcRequestBuilders.get(*myUri*)
.accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
)
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
}
获取以下错误消息…
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalStateException:找不到接口com.querydsl.core.types.Predicate的主要或默认构造函数
有人知道如何使用Pageable和Predicate测试restcontroller吗?
解决方法:
>尝试添加测试类注释@Import(QuerydslWebConfiguration.class).它将com.querydsl.core.types.Predicate的控制器参数解析器添加到spring上下文中.
>但是在您面临例外之后:
找不到接口org.springframework.data.domain.Pageable的主要或默认构造函数.
>有注释,为这两个接口加载参数解析器. org.springframework.data.web.config.EnableSpringDataWebSupport
为您的测试类添加:
@RunWith(SpringRunner.class)
@WebMvcTest(*myController*.class)
@EnableSpringDataWebSupport
public class ControllerTest{
@Test
public void readAllTest(){
MockMvcBuilders.standaloneSetup(*myController*)
.build().perform(MockMvcRequestBuilders.get(*myUri*)
.accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
)
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
}
}