アプリケーションコンテキストファイルを交換しようとしているので、実際の IDE を使用して IDE でテストしたり、JUnit を使用して IDE でテストファイルをテストしたりできます。
必要最小限の例は次のようになります。
mainConfig.xml
<context:component-scan base-package="myPackage" />
<bean id="myBean" class="my.class"/>
testConfig.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 テストを実行すると、(JUnit ファイルの @ContextConfiguration により) testConfig.xml が読み込まれますが、(ClassPathXmlApplication により) mainConfig.xml も読み込まれます。2 つのファイルが異なるため、衝突が発生します。
このような不一致が発生しないように、これらすべてを配線する正しい方法は何ですか?