2014-02-10 112 views
3

我想用Spring MVC模擬模塊來單元測試我的控制器。我添加了這個:春天MVC嘲笑

@Before 
    public void beforeTest() { 
     MockitoAnnotations.initMocks(this); 
     standaloneSetup(new CarController()); 
    } 

它工作正常。但是,我創建了一個控制器建議,其中有一個註解爲@ExceptionHandler的方法。我想測試它在單元測試期間的工作情況。我看到了,我可以建立一個MockMvc對象,並傳遞到standaloneSetup(..)

MockMvcBuilders.standaloneSetup(
    new CarController()).setHandlerExceptionResolvers(...).build(); 

然而,當我這個做那個檢查異常處理程序的工作原理通行證,但所有jsonpath失敗,並訪問響應其它測試的測試此錯誤:

java.lang.IllegalStateException: Expected response body to be verified as JSON, 
    HTML or XML but content-type 'null' is not supported out of the box. 
Try registering a custom parser using: 
    RestAssured.registerParser("null", <parser type>); 
Content was: 

如何解決此問題?哪裏不對?

底線是,我想單元測試我的休息api。當我爲實例添加異常處理程序時,應如何執行此操作?

+0

你能舉一個測試失敗的例子嗎?我們必須看到你的異常處理程序和控制器方法。 –

+0

我想我誤解了一下這個用法。我將在沒有Rest Assured的情況下查看Spring MVC測試框架並嘗試一些示例。 – LuckyLuke

回答

1

Bottom line is that I want to unit test my rest api. How should I do this when I have added a exception handler for instance?

對於一個我會使用內置的春天模擬框架,從3.2版本,而不是放心(這可能是好的,但可以;難以想象它集成以及)。這可能涵蓋了getting started的基礎知識。其次,您可以在您的測試方法中使用try and catch,然後在布爾值上聲明是否拋出異常。或者,例如,測試是否從控制器執行期望的狀態代碼500返回異常消息。這將取決於你的api。

+0

你是第一個領導我走向正確方向的人。我已經閱讀了Spring測試的文檔,並且它能夠正常工作。 Spring MVC框架就是答案。我想我設法混合來自兩個不同框架的類等 – LuckyLuke

0

請求的模擬內容類型爲null,因此spring mvc無法確定它應該調用哪個方法。如果你將值設置爲application/html + xml,application/json等,它應該可以正常工作。

+0

我應該在哪裏設置?除了在控制器上設置一些模擬對象,我所做的只是在測試方法中:'RestAssuredMockMvc.given()。when()。get(「cars/1」)。then()。statusCode(404);' – LuckyLuke

1

嘗試使用接受():

mockMvc.perform(post("/hotels/{id}", 42).accept(MediaType.APPLICATION_JSON)); 

建設MockMvc時,您還可以設置的返回類型。

mockMvc = standaloneSetup(new AccountController()) 
     .defaultRequest(get("/") 
     .contextPath("/app").servletPath("/main") 
>>  .accept(MediaType.APPLICATION_JSON).build(); 

http://docs.spring.io/spring/docs/4.0.1.RELEASE/spring-framework-reference/htmlsingle/#unit-testing-spring-mvc

您需要在過程的正確的MediaType值傳遞。

+0

感謝這對我工作 – Romell