我正在尝试交换应用程序上下文文件,以便我可以在我的 IDE 中使用真实文件进行测试,或者在我的 IDE 中使用带有测试文件的 JUnit 进行测试。
一个简单的例子是:
mainConfig.xml
<context:component-scan base-package="myPackage" />
<bean id="myBean" class="my.class"/>
测试配置.xml
<context:component-scan base-package="myPackage" />
<bean id="myBean" class="my.test.class"/>
我处理应用程序上下文的java代码类似于下面(但实际上是一个单例)
public final class MyLoader {
private ApplicationContext context;
public MyLoader(){
context = new ClassPathXmlApplicationContext(
"classpath:/hardcoded/path/to/mainConfig.xml");
}
public <T> T getComponent(final Class<T> type) {
return (T) context.getBean(type);
}
}
由于应用程序有许多不同的入口点,因此从代码中的多个点调用 MyLoader。
我的 JUnit 测试代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/hardcoded/path/to/testConfig.xml")
public final class Foo{}
当我运行 JUnit 测试时,它会加载 testConfig.xml(由于 JUnit 文件中的 @ContextConfiguration),但它也会加载 mainConfig.xml(由于 ClassPathXmlApplication)。这将导致冲突,因为这两个文件不同。
在不会发生这种不匹配的情况下,将所有这些连接起来的正确方法是什么?