次のテストクラスがあります
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {
@Autowired
MyService service;
...
}
そのような方法のいずれかでプログラムでservices-test-config.xml
にアクセスすることは可能ですか?のような:
ApplicationContext ctx = somehowGetContext();
テストもSpring Beanのようにインスタンス化されるため、ApplicationContextAwareインターフェースを実装するだけです。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest implements ApplicationContextAware
{
@Autowired
MyService service;
...
@Override
public void setApplicationContext(ApplicationContext context)
throws BeansException
{
// Do something with the context here
}
}
これもうまくいきます:
@Autowired
ApplicationContext context;
テストクラスがSpring JUnitクラスを拡張する場合
(例:AbstractTransactionalJUnit4SpringContextTests
またはAbstractSpringContextTests
を拡張する他のクラス)、getContext()
メソッドを呼び出すことでアプリのコンテキストにアクセスできます。
パッケージorg.springframework.testの javadocs を確認してください。
ApplicationContext
およびSpringClassRule
ルールを使用して、SpringMethodRule
クラスのインスタンスを挿入することができます。別の非スプリングランナーを使用する場合は、非常に便利です。以下に例を示します。
@ContextConfiguration(classes = BeanConfiguration.class)
public static class SpringRuleUsage {
@ClassRule
public static final SpringClassRule springClassRule = new SpringClassRule();
@Rule
public final SpringMethodRule springMethodRule = new SpringMethodRule();
@Autowired
private ApplicationContext context;
@Test
public void shouldInjectContext() {
}
}