目前我正在研究基于弹簧的应用程序。我为应用程序的许多目的确实有一些单元测试。问题是,我还没有找到任何解决方案来对我的应用程序进行真正的集成测试。春季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