目前我正在研究基於彈簧的應用程序。我爲應用程序的許多目的確實有一些單元測試。問題是,我還沒有找到任何解決方案來對我的應用程序進行真正的集成測試。春季3 - 真正的集成測試
讓我給你舉個例子:
在我目前的測試中,我做的設置對特定控制器的請求,並通過這些組件,以我的處理程序:
// setup request
request.setMethod("GET");
request.setRequestURI("/customer");
request.addHeader("Accept", "application/json");
request.addHeader("Authorization", "Basic xyz"); // base_64
handlerAdapter.handle(request, response, myController);
但是,這是不是一個真正的集成測試,因爲我說的是,好吧,我確實有一個請求,myController應該處理這個請求。
這是一個問題,因爲我真的想測試如下:
我有一個請求,我的應用程序應該處理這個請求。我不想指定控制器,因爲如果運行的應用程序和「/ customer」spring的請求發送哪個控制器來解決我的請求。 我真的很想模擬我是一個瀏覽器或另一個客戶端向我的後端發送請求。
我想測試的原因是,否則某種測試,雖然經過測試的功能不會在「現實世界」
我可以給你這個例子就明白了工作,以何種方式測試不同於生產運行:
讓我們假設我有一個帶有參數的窗體中的文件上傳。我的控制器功能是這一個:
@RequestMapping(value="/{id}", method = RequestMethod.PUT, headers="content-type=multipart/form-data")
public ResponseEntity<String> createFromMyForm(@PathVariable("id") Long id, @RequestParam String myParameter, @RequestParam MultipartFile myFile) {
//...
}
看一看的RequestMethod.PUT,這不是在生產版本的工作,因爲上傳文件的HTML標準是POST。
在我的單元測試我這樣做:
// setup request
MockMultipartHttpServletRequest multipartRequest = new MockMultipartHttpServletRequest();
MockHttpServletResponse multipartResponse = new MockHttpServletResponse();
// Open file
final FileInputStream fis = new FileInputStream("img/test.png");
MockMultipartFile multipartFile = new MockMultipartFile(
"myParameter", fis);
// generate multipart mock
multipartRequest.addFile(multipartFile);
multipartRequest.addParameter("json", "test");
// send request
handlerAdapter.handle(multipartRequest, multipartResponse, controller);
問題:測試通過,但它不應該。這個測試通過的原因有幾個。首先,我正在詳細說明請求。我沒有說我有要求,但我不得不說我有一個MultipartRequest。這導致調度程序servlet在一個名爲likeMultipartRequest()的函數中返回true。在生產運行中,它返回false,因爲在PUT方法上沒有多部分請求。此外,我再次指定應該處理這個請求的控制器。
也許還有其他例子,但我想說的是,有什麼方法可以在真實條件下測試我的應用程序,包括我的html協議和其他一切嗎?
我真的很感激任何幫助!
在此先感謝
感謝您的支持!那麼有沒有機會用Spring支持的功能來測試這種東西? – Alexander
也許一個更多的信息,我不只是測試HTML答覆。我也有JSON要求。是否有可能爲這些框架中的請求設置單獨的標頭? – Alexander
@Alexander:Spring僅提供單元測試和集成測試支持。是的,這些框架可以完全控制標題。 – skaffman