كيفية الوصول إلى سياق الربيع في اختبارات Junit المشروحة مع runwith و contextconfiguration؟
-
19-09-2019 - |
سؤال
لدي اتباع فئة الاختبار
@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() {
}
}
لا تنتمي إلى StackOverflow