كيفية الوصول إلى سياق الربيع في اختبارات Junit المشروحة مع runwith و contextconfiguration؟

StackOverflow https://stackoverflow.com/questions/2425015

سؤال

لدي اتباع فئة الاختبار

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

  @Autowired
  MyService service;
...

}

هل من الممكن الوصول services-test-config.xml برمجيا في واحدة من هذه الأساليب؟ يحب:

ApplicationContext ctx = somehowGetContext();
هل كانت مفيدة؟

المحلول

نظرا لأن الاختبارات سيتم إنشاء مثيل لها مثل فول الربيع أيضا، فأنت بحاجة فقط إلى تنفيذ واجهة 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;

إذا كانت فئة الاختبار الخاصة بك تمديد فصول الربيع Junit
(على سبيل المثال، AbstractTransactionalJUnit4SpringContextTests أو أي فئة أخرى تمتد AbstractSpringContextTests)، يمكنك الوصول إلى سياق التطبيق عن طريق الاتصال getContext() طريقة.
تفحص ال جافادوكس للحصول على حزمة ORG.SPringFramework.test.

من الممكن حقن مثيل 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() {
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top