是否有一种体面的方法可以从XML读取弹簧应用程序上下文,而无需立即初始化bean,因此可以对它们进行嘲笑,然后才能真正创建它们?
是的,我知道懒惰,但是实际的applicationContext.xml对我来说是禁忌。
情况是,我必须在应用程序上创建一些JUNIT测试,该应用程序以某种方式创建了一些困难:
-
不得更改配置文件,也不能进行测试的代码
-
有很多豆子,其中一些相当复杂且难以模拟
-
测试的一部分是使用尽可能多的豆子
使用 某些bean实现了
InitializingBean
,在詹金斯(Jenkins)试图构建时验证了初始化的环境,并抛出错误。
new FileSystemXmlApplicationContext("config.xml")
立即初始化豆子并在适当的环境中引发错误。
我尝试的是:
我曾尝试过powermock何时嘲笑有问题的豆子,但是要做到这一点,我必须知道实际上创建豆类的班级。由于此类属于春季框架,因此可能会随后版本而变化。使用@prepareeverythingfortest时,会导致堆栈流异常。该应用程序是现实生活,而不是一些教程中的一小部分代码。
我还搜索了 forcelazy filesystemxmlapplicationContext,但什么都没找到的东西。
请求不要开始对不良的设计na,我知道这一点。
您可以为您的测试目的编写自己的ApplicationContext。在那里,您需要写自己的beanfactory。在该工厂中,您可以用模拟替换一些豆子。
我只记得一个选项。评估您是否可以使用春季配置文件。它将允许根据配置文件选择其他实现。
示例:
<!-- This is the default myBean -->
<beans>
<bean id="myBean" class="mypackage.MyBean" />
</beans>
<!-- This is the mocked myBean for testing purposes, it will take place when testingProfile is active -->
<beans profile="testingProfile">
<bean id="myBean" class="mypackage.MyBeanMock" />
</beans>
您可以指示通过属性或环境变量使用的配置文件。例如,如果您在项目中使用Maven,则可以按照:
进行测试mvn test -Dspring.profiles.active="testingProfile"
看一下:
http://www.baeldung.com/spring-profiles
https://spring.io/blog/2011/02/11/spring-framework-3-1-m1-relase/