其他分享
首页 > 其他分享> > spring – jUnit:找不到接口com.querydsl.core.types.Predicate的主要或默认构造函数

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));
  }
}

标签:querydsl,spring,junit,mockito
来源: https://codeday.me/bug/20190910/1798861.html