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

問題:

  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是用來構(gòu)造MockMvc的構(gòu)造器,其主要有兩個實現(xiàn):

StandaloneMockMvcBuilder和DefaultMockMvcBuilder,StandaloneMockMvcBuilder繼承了 DefaultMockMvcBuilder。

直接使用靜態(tài)工廠MockMvcBuilders創(chuàng)建即可:
  1. MockMvcBuilders.webAppContextSetup(WebApplicationContext context):使用應用程序上下文來構(gòu)建MockMVC,指定WebApplicationContext,將會從該上下文獲取相應的控制器并得到相應的MockMvc;更加接近集成測試,讓Spring加載控制器以及依賴。

  2. MockMvcBuilders.standaloneSetup(Object... controllers):手工創(chuàng)建并配置的控制器,通過參數(shù)指定一組控制器,這樣就不需要從上下文獲取了;更加接近單元測試,專注于單一控制器的測試。

參考

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容