Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 具有MockWebServiceClient的可继承线程上下文_Spring_Spring Mvc - Fatal编程技术网

Spring 具有MockWebServiceClient的可继承线程上下文

Spring 具有MockWebServiceClient的可继承线程上下文,spring,spring-mvc,Spring,Spring Mvc,我正在尝试使用MockWebServiceClient为web服务运行多线程测试,但这失败了,因为缓存是通过@RequestScopeanootation配置请求范围的 这就是我得到的错误: Wrapped by:org.springframework.beans.factory.BeanCreationException:创建名为“scopedTarget.cacheManager”的bean时出错:当前线程的作用域“请求”未处于活动状态;如果您想从一个单体引用它,请考虑为这个bean定义一个

我正在尝试使用
MockWebServiceClient
为web服务运行多线程测试,但这失败了,因为缓存是通过
@RequestScope
anootation配置请求范围的

这就是我得到的错误:

Wrapped by:org.springframework.beans.factory.BeanCreationException:创建名为“scopedTarget.cacheManager”的bean时出错:当前线程的作用域“请求”未处于活动状态;如果您想从一个单体引用它,请考虑为这个bean定义一个作用域代理;嵌套异常为java.lang.IllegalStateException:未找到线程绑定请求:您是在实际web请求之外引用请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,但仍然收到此消息,则您的代码可能在DispatcherServlet/DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求。

现在,如果我使用
MockMvc
而不是
MockWebServiceClient
,我想我可以使用
MockMvcBuilders.webAppContextSetup(wac).addFilter(requestContextFilter)
,并使线程上下文可继承

但是,此选项不适用于
MockWebServiceClient.createClient(wac)


使用
MockWebServiceClient
时,是否有方法使线程上下文可继承?或者我的问题还有其他解决方案吗?

我觉得这个用例有点奇怪。集成测试通常是单线程的,因为它们与之交互的服务是无状态的,或者在数据库中只有状态(否则在web场景中几乎总是存在竞争条件)。此外,即使您成功地运行了多线程测试,也不能保证没有错误(这只能通过分析或强制计时来完成)。通常多线程测试属于性能测试域,不在模拟级别运行。@KlausGroenbaek感谢您的写作。我知道这不是典型的情况,我们通常也不会编写这样的测试。然而,我认为我正在处理服务中某个地方的种族状况,这似乎是尝试和再现它的最快方式。我不会把没有失败作为正确性的证明,而是计划多次运行它,希望它在某个时候会失败。我认为这个用例有点奇怪。集成测试通常是单线程的,因为它们与之交互的服务是无状态的,或者在数据库中只有状态(否则在web场景中几乎总是存在竞争条件)。此外,即使您成功地运行了多线程测试,也不能保证没有错误(这只能通过分析或强制计时来完成)。通常多线程测试属于性能测试域,不在模拟级别运行。@KlausGroenbaek感谢您的写作。我知道这不是典型的情况,我们通常也不会编写这样的测试。然而,我认为我正在处理服务中某个地方的种族状况,这似乎是尝试和再现它的最快方式。我不会把没有失败作为正确性的证明,而是计划多次运行它,希望它在某个时候失败。