spring – jUnit:找不到接口com.querydsl.core.types.Predicate的主要或默认构造函数

我在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));
  }
}
上一篇:如何使用Mockito使mock变为void方法


下一篇:android Mockito 升级2.0 发生 AbstractMethodError 异常