我正在尝试为spring mvc应用程序中的一个控制器编写集成测试。控制器调用一个服务类,服务类又调用一个DAO从存储库读/写数据。DAO需要查找一些配置。配置bean在WEB-INF/applicationContext中定义。xml文件。
我用的是这样的东西:
Configuration config =(Configuration)ContextLoader。getCurrentWebApplicationContext()。getBean(“config”);
private String namespace = config。getProperty(“);
属性存储在zookeeper中,所以我没有使用spring的属性管理工件。
问题是在运行JUnit测试ContextLoader时。getCurrentWebApplicationContext()始终返回null。
到目前为止,我已经研究了以下方法:
- Ted Young的方法(只需谷歌搜索spring mvc集成测试Ted Young)
- https://github.com/SpringSource/spring-test-mvc
3.本网站questions/8464919/unit-testing-a-servlet-that-depends-on-springs-webapplicationcontextutils-getre
4.使用Selenium/JWebunit - http://confluence.highsource.org/display/Hifaces20/Hifaces20+Testing+package+-+testing%2C+tracing+and+debugging+web+applications+with+Jetty
% 1无法解决此问题。WebApplicationContext保持为空
2表示对WebApplicationContext的支持将在Spring 3中提供。2
3.我不明白从哪里获取testApplicationContext和getServletContext()?
4.我不想走这条路,因为这完全是黑盒测试。
5.我现在在看5。但这需要启动servlet容器。没有别的选择了吗?
我将感激你能提供的任何帮助。
感谢PixalSoft
@Ted Young不允许我说完我说的话。使用loader=MockWebApplicationContextLoader,当webapp由servletcontainer初始化时,Spring ContextLoader的行为不应该与默认的contextloader一样吗?我需要做什么特殊的事情来获得MockWebApplicationContextLoader的句柄?注入config对象适用于单例对象。但不可能都是单例的。在每个构造函数中传递配置对象听起来太乏味了。现在,我已经创建了一个类,它有一个静态配置对象,通过setter方法自动连接。我将看看ApplicationContextAware。很多thx
4条答案
按热度按时间o8x7eapl1#
您必须手动将
WebApplicationContext
添加到ContextLoaderListener
。这会有用的wooyq4lh2#
在junit测试的开头添加以下代码:
如果需要为上下文路径添加多个xml,只需将它们放在同一个字符串中,用空格分隔,如下所示:
flvtvl503#
为什么要使用ContextLoader。getCurrentWebApplicationContext返回null是因为,当您使用我的MockWebApplicationContextLoader时,您既没有使用Web应用程序上下文,也没有使用特定的ContextLoader实现。
既然你的仓库是由Spring管理的,为什么不简单地将config对象注入仓库呢?注入config对象是访问它的最合适的方法。然后,您可以在用@PostConstruct注解的方法中初始化名称空间属性。
或者,您的DOA可以实现ApplicationContextAware,以便在构造期间接收应用程序上下文的副本。
zqry0prt4#
将属性文件存储在类路径中。
现在访问控制器类中的属性,如下所示:
现在你可以访问你的财产文件了。
我相信它会工作。