2017-09-01 212 views
0

隨着春天啓動不工作的測試,我想測試我的@RestController,一切都只是當我嘗試測試與@PathParam請求映射好。春季啓動MockMvc與@PathVariable

這涉及接口(在此情況下的TestController)保持爲註解請求映射!如果我刪除接口一切都很好... Seemes是一個問題......

我的控制器:

public interface TestController { 

    @RequestMapping(value = "/bar/{foo}/baz", method = RequestMethod.GET) 
    String test(@PathVariable("foo") String foo); 


    @RestController 
    class TestControllerImpl implements TestController { 

     @Override 
     public String test(String foo) { 
      return foo; 
     } 
    } 

} 

我的測試:

@Test 
public void notworkingtest() throws Exception { 

    //THIS TEST SHOULD WORK, BUT DON'T ... 

    final MockMvc mockMvc = ... 

    mockMvc.perform(get("/bar/{foo}/baz", "foovalue") // Or get("/bar/foovalue/baz") 
      .contentType("text/plain")) 
      .andExpect(status().is2xxSuccessful()) 
      .andExpect(content().string("foovalue")); 

} 

@Test 
public void strangeworkingtest() throws Exception { 

    //THIS TEST WORKS, BUT WHY ?!? 

    final MockMvc mockMvc = ... 

    mockMvc.perform(get("/bar/{foo}/baz", "WhatEverValue") 
      .param("foo", "foovalue") // This param should be useless ... 
      .contentType("text/plain")) 
      .andExpect(status().is2xxSuccessful()) 
      .andExpect(content().string("foovalue")); 

} 

第二測試工作時,我有.param(「foo」,「foovalue)並保持get(」/ bar/{foo}/baz「,」WhatEverValue「)...

如果我刪除Controller的接口, 。

有人可以向我解釋嗎?

THX

+0

你可以不帕拉姆取代的get( 「/測試/ {FOO})」 使用get( 「/測試/ foovalue」)。 – sergiu

+0

'.PARAM(「富」,「foovalue」)'設定值 – Sam

+0

@sergiu已經嘗試..沒有相同的行爲... – Oziris

回答

0

你可以試試這個:

mockMvc.perform(get("/test/{foo}?foo=" + "foovalue") 
     .contentType("text/plain")) 
     .andExpect(status().is2xxSuccessful()) 
     .andExpect(content().string("foovalue")); 
0

下面是兩種方式:

  1. 更改URL爲您的端點:

    @RequestMapping(值=「/test「,method = RequestMethod.GET)

    mockMvc.perform(get(「/ test」) .param(「foo」,「Value」)) .andExpect(status()。is2xxSuccessful()) .andExpect(content()。string(「foovalue 「));

  2. 使用正確的URL打電話給你的端點:

    mockMvc.perform(獲取( 「/用戶/ 1568 /刪除」)) .andExpect(狀態()is2xxSuccessful()) .andExpect(內容().string( 「foovalue」));

+0

nope ..得到一個404 – Oziris

+0

@Oziriz,用下一個更新你的註釋:@RequestMapping(value =「/ test」,method = RequestMethod.GET) – Speise

+0

不是我想要的...我的uri更復雜這只是一個例。例如:/ user/1568/delete,其中1568是id – Oziris

0

PathVariable不同於requestParam,因爲pathVariable是URL的一部分。 這就是爲什麼.param("foo", "foovalue")不重寫你的pathVariable因爲後者是設置requestParam。

看到@RequestParam vs @PathVariable