我正在研究一个Java 7 / Spring MVC项目。我有一个A类。我想测试A的逻辑,所以我创建了一个名为B的模拟类,它扩展了A并获取了它的受保护方法。
我有一个application-config.xml文件和一个unit-testing-config.xml 在app-config中,我为A创建一个bean并设置beans id。在unit-testing-config中,我用B覆盖了该定义。
我已经记录了哪个构造函数被调用,它是A.但是当我删除B的扩展部分并重新运行时,spring会创建一个B的实例。有没有办法明确告诉spring我希望孩子成为实例化。我的定义如下:
<bean id="something" class="com.site.namespace.package.MockA" autowire="byName" />
答案 0 :(得分:1)
据我所知,你在应用程序&amp;中的bean具有相同的id。的单元测试-配置即可。这意味着加载的问题很可能与加载xml配置文件的顺序有关。如果在第一种情况下最后加载 application-config.xml ,则A将覆盖 unit-testing-config.xml B定义,否则。因此,您需要确保以相同的顺序加载xml,以获得所需的效果。
您是否使用过Spring配置文件:https://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/这是进行此类测试的首选方法,具有单独的测试和生产环境实例。我会切换到配置文件,并将配置保存在一个地方。
答案 1 :(得分:0)
Spring Re-Inject可以在不修改XML文件的情况下注入模拟。