美文网首页
jUnit: No primary or default con

jUnit: No primary or default con

作者: 一颗老呀老松树 | 来源:发表于2019-05-08 14:55 被阅读0次

问题:

  No primary or default constructor found for interface com.querydsl.core.types.Predicate

有问题的code:

MockMvc mockMvc;
@Before
public void setup() {
    mockMvc = MockMvcBuilders.standaloneSetup(new APIRoleResource(roleService)).build();
}

@Test
public void list() throws Exception {
    mockMvc.perform(get("/api/roles/")
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk());
    assertThat(roleService.repository().count()).isNotZero();
}

解决方式一:

MockMvc webContextMockMvc;
@Before
public void setup() {
    /**
     * 通过上下文build mock
     */
    webContextMockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();

    mockMvc = MockMvcBuilders.standaloneSetup(new APIRoleResource(roleService)).build();
}
@Test
public void list() throws Exception {
//        mockMvc.perform(get("/api/roles/")
//                .accept(MediaType.APPLICATION_JSON))
//                .andExpect(status().isOk());
    webContextMockMvc.perform(MockMvcRequestBuilders.get("/api/roles/")
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk());
    assertThat(roleService.repository().count()).isNotZero();
}

MockMvcBuilder

MockMvcBuilder是用来构造MockMvc的构造器,其主要有两个实现:

StandaloneMockMvcBuilder和DefaultMockMvcBuilder,StandaloneMockMvcBuilder继承了 DefaultMockMvcBuilder。

直接使用静态工厂MockMvcBuilders创建即可:
  1. MockMvcBuilders.webAppContextSetup(WebApplicationContext context):使用应用程序上下文来构建MockMVC,指定WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的MockMvc;更加接近集成测试,让Spring加载控制器以及依赖。

  2. MockMvcBuilders.standaloneSetup(Object... controllers):手工创建并配置的控制器,通过参数指定一组控制器,这样就不需要从上下文获取了;更加接近单元测试,专注于单一控制器的测试。

参考

https://stackoverflow.com/questions/50679551/junit-no-primary-or-default-constructor-found-for-interface-com-querydsl-core-t

相关文章

网友评论

      本文标题:jUnit: No primary or default con

      本文链接:https://www.haomeiwen.com/subject/wpvmoqtx.html