Spring集成测试

Posted

技术标签:

【中文标题】Spring集成测试【英文标题】:Spring integration test 【发布时间】:2013-01-16 18:43:11 【问题描述】:

我知道对此有几个问题..但我仍然无法使其发挥作用。 我有一个 spring 应用程序,我正在尝试为其编写集成测试。 我尝试使用 xml 文件设置应用程序上下文(或多或少与我用于应用程序的 xml 文件相同)。 出现的问题如下:

    配置未加载,我收到如下错误:“expected single bean but found 0.”

    我已经指定了正确的路径,然后它开始抱怨在类路径中找不到资源。我已经复制了文件夹 test/resources 中缺少的文件。

    现在,它无法加载应用程序上下文并出现以下错误:没有为依赖项找到类型为 [javax.servlet.http.HttpServletRequest] 的匹配 bean。 (在我的配置文件中我有 mvc:annotation-driven />)

    我已按照此示例 http://www.scarba05.co.uk/blog/2010/07/more-on-integration-testing-of-spring%E2%80%99s-mvc-annotation-mapppings-for-controllers/ 进行集成测试。不过,当我拨打电话 handlerAdapter.handle(request, response, controller);我收到 ClassCastException,因为我的控制器不是 HandlerAdapter 的实例。我几乎遵循了与此处发现的错误路径相同的错误路径:http://forum.springsource.org/showthread.php?131196-Spring-3-1-2-Controller-annotated-Controllers-JUnit-test-fail。

是的,我是 Spring 新手,但至少我已经搜索和阅读了很多。您能否指点我一个好的教程或一些示例项目(除了 spring 项目),以便我可以解决我的问题。

提前感谢您花时间阅读我的问题!

【问题讨论】:

【参考方案1】:

我写了一篇关于我认为覆盖 Spring 应用程序上下文以进行测试的最佳方法的博客文章。基本上,您不应该复制您的主要应用程序上下文 xml 文件进行测试,因为这会导致重复,而只需覆盖您需要的部分:

http://www.solubris.com/blog/overriding_spring_context_for_testing

但是,这不包括控制器测试。对于那些,您提到的帖子现在已被 spring-mvc-test 项目弃用,该项目现在包含在 spring 3.2.x 中

这里有一些关于 Spring MVC 测试框架的阅读:

http://static.springsource.org/spring-framework/docs/current/spring-framework-reference/html/testing.html#spring-mvc-test-framework http://blog.springsource.org/2012/11/12/spring-framework-3-2-rc1-spring-mvc-test-framework/

【讨论】:

您好,谢谢您的回答!我会查看文档。我只在我的应用程序上下文中保留了我需要的部分。我看到了 spring-test-mvc 项目和示例,但不幸的是我必须使用 spring 3.1.2。在 spring-test-mvc 中,他们使用从 3.2.x 开始可用的 MockMvc。此外,在 spring-mvc-showcase 中,他们重用 servlet-context 来设置应用程序上下文 (github.com/SpringSource/spring-mvc-showcase/blob/master/src/…)。

以上是关于Spring集成测试的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 集成测试(业务层)

Spring Boot教程14——集成测试

Elasticsearch Spring boot 集成测试

单元测试与 Spring 的集成测试

带有配置文件的 Spring 集成测试

Spring异步方法集成测试失败