65

次のテストクラスがあります

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/services-test-config.xml"})
public class MySericeTest {

  @Autowired
  MyService service;
...

}

services-test-config.xmlそのような方法の1つでプログラムでアクセスすることは可能ですか?好き:

ApplicationContext ctx = somehowGetContext();
4

4 に答える 4

85

これも問題なく動作します。

@Autowired
ApplicationContext context;
于 2010-03-11T13:31:08.707 に答える
58

テストはSpringBeanのようにインスタンス化されるため、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
    }
}

xml以外のニーズの場合は、次のこともできます。

@RunWith(SpringJUnit4ClassRunner.class)
/* must provide some "root" for the app-context, use unit-test file name to the context is empty */
@ContextConfiguration(classes = MyUnitTestClass.class)
public class MyUnitTestClass implements ApplicationContextAware {
于 2010-03-11T13:05:04.410 に答える
8

テストクラスがSpringJUnitクラス
AbstractTransactionalJUnit4SpringContextTestsまたは、拡張する他のクラスAbstractSpringContextTests)を拡張する場合は、メソッドを呼び出すことでアプリコンテキストにアクセスできますgetContext()。パッケージorg.springframework.testのjavadocs
を 確認してください。

于 2010-03-11T13:07:53.857 に答える
2

とルールApplicationContextを使用して、クラスのインスタンスを注入することができます。春以外の別のランナーを使用したい場合は、非常に便利です。次に例を示します。SpringClassRuleSpringMethodRule

@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() {
    }
}
于 2018-12-31T16:02:18.733 に答える