2015-11-05 56 views
1

我正在測試我的Spring @RestController使用獨立的設置,並嘲笑一些使用mockito自動佈線的bean,到目前爲止我所有的測試都已成功,直到我嘗試測試這個restservice:使用SpringFramework測試和Mockito HttpServletResponse響應上的空指針

@RequestMapping(value = "/some/{someId}/other/someagain", method = RequestMethod.POST) 
public FileSystemResource downloadInvoiceQuery(@PathVariable Long someId, 
     @RequestBody SomeClass request, HttpServletResponse response) { 
. 
. 
. 
mockedBean.method("object1","object2"); 
response.setHeader("some headers"); 
} 

使用此測試:

when(mockedBean.method(any(), any())).thenReturn(null); 

mockMvc.perform(MockMvcRequestBuilders.post("/some/{someId}/other/someagain", 1L) 
.contentType(MediaType.APPLICATION_JSON).content("{}")).andExpect(MockMvcResultMatchers.status().isOk()); 

我得到一個空指針時setHeaders方法被調用了在控制器HttpServletResponse對象。我不知道如何注入或傳遞該響應對象以避免空指針。謝謝你的幫助。

回答

1

當測試Spring MVC控制器我會一直使用MockMvc

在這裏看到一個例子: How to test a spring controller method by using MockMvc?

的文檔可以在這裏找到: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#spring-mvc-test-framework

下面是從文檔的例子使用獨立設置:

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration("test-servlet-context.xml") 
public class ExampleTests { 

    @Autowired 
    private WebApplicationContext wac; 

    private MockMvc mockMvc; 

    @Before 
    public void setup() { 
     this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); 
    } 

    @Test 
    public void getAccount() throws Exception { 
     this.mockMvc.perform(get("/accounts/1").accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) 
      .andExpect(status().isOk()) 
      .andExpect(content().contentType("application/json")) 
      .andExpect(jsonPath("$.name").value("Lee")); 
    } 

} 
+1

您是不使用獨立安裝:MockMvcBuilders.webAppContextSetup,但可能使用此設置我將避免響應空指針。 – xiidarkevil

+0

正確 - 感謝提示 - 但在這兩種變體應該做的情況下 - 建立一個獨立的上下文是這樣完成的'this.mockMvc = MockMvcBuilders.standaloneSetup(new AccountController())。build();' –

+0

我有我的配置正確地設置爲獨立的方式,我的控制器公開了很多網址,並且我以成功的方式測試了它們,但是我顯示的方法是唯一一個響應對象中的空指針失敗的方法。 – xiidarkevil