اختبارات سياق الربيع لا يمكن العثور على مواقع التكوين

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

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي انتشار تطبيق واسع عبر عدة الربيع الحبة ملفات تعريف أكس. في جناح اختباري I يدويا تحميل الاحتياطي للملفات XML أحتاج باستخدام FileSystemXmlApplicationContext لأداء اختبارات أريد أن أشغل. وهذا يقلل اختبار إعداد الوقت ويتيح لي الفرصة لاستخدام نفس ملفات التكوين الدقيقة التي تستخدم في الإنتاج.

والآن أحاول أن استخدام فئات قاعدة اختبار المعاملات الربيع التي تأخذ المواقع التكوين وتحميل السياق بالنسبة لي. لسبب ما عندما يتم إنشاء إطار تطبيق الربيع لا يمكن العثور على أي من ملفات التكوين. هذا هو الخلط لأنني تشغيل الاختبار من دليل العمل نفسه كما هو الحال عندما كنت تحميل التكوين نفسي باستخدام FileSystemXmlApplicationContext. إذا كنت إلحاقها كل ما عندي من المواقع التكوين مع "ملف:" تم العثور على مسارات أحدده في اختبار بلدي، ولكن أي الملفات التي يتم استيرادها أو المشار إليه بواسطة حبوب المحددة في التكوين (مثل خصائص الملفات) لا يمكن العثور عليها. ما هي الصفقة؟ هل يمكنني الحصول على الاختبارات التي تمتد الطبقات اختبار سياق الربيع للعمل في نفس تلك حيث أنا خلق سياق نفسي؟

وعلى سبيل المثال، وخلق سياق مثل هذا يعمل بشكل جيد:

ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[] { "WEB-INF/services-context.xml"})

إذا أقدم AbstractTransactionalDataSourceSpringContextTests ما يلي لا يجد الخدمات context.xml:

@Override
protected String[] getConfigLocations() {
   return new String[] { "WEB-INF/services-context.xml"};
}

وهذا يجد الخدمات للسياق، ولكن PropertyPlaceholderConfigurer المحددة في هناك فشل للعثور عليه من خصائص الملفات.

 @Override
 protected String[] getConfigLocations() {
    return new String[] { "file:WEB-INF/services-context.xml"};
 }
هل كانت مفيدة؟

المحلول 2

وبالإضافة إلى getConfigLocations الغلابة كما أنني تجاهلت loadContext واستخدام fileSystemXmlApplicationContext مضمونة في هناك.

 @Override
 protected String[] getConfigLocations() {
     return new String[] { "WEB-INF/services-config.xml" };
 }

 @Override
 protected ConfigurableApplicationContext loadContext(String[] locations) throws Exception {
     return new FileSystemXmlApplicationContext(locations);
  }

نصائح أخرى

ولقد وضعنا كل من التكوين الربيع وخصائص الملفات في classpath، والتي تحافظ على الأشياء البسيطة - ونحن يمكن أن تمتد فقط الطبقات اختبار لدينا من فئة أساسية مثل:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={
        "/spring/*.xml", 
        "/testSpring/*.xml" })
public abstract class AbstractIntegrationTest  {

وهنا، مسارات هي كل المسارات في CLASSPATH.

إذا كنت لا تريد أن تفعل ذلك، هل فحص الكيفية التي يتم الرجوع إلى خصائص الملفات الخاصة بك في خدمات context.xml؟ وأظن أنه إذا قمت بإضافة ملف: لتكوين السياق الخاص بك، فإنك سوف تحتاج أيضا إلى إضافة هذه إلى مرجع ملف الممتلكات الخاصة بك. هل يمكن ربما مجرد استخدام ملف اختبار الربيع التكوين منفصل لتغيير تعريف نائبا الممتلكات الخاصة بك، ووضع هذا في نهاية قائمة من الملفات السياق - وتعاريفه ثم تجاوز تلك المحددة في الملفات السابقة

ومواقع التهيئة لديك قريبة محددات، وسيتم تفسيره على هذا النحو من قبل الطبقة اختبار قاعدة، مع URI يجري حلها نسبة إلى موقع الطبقة اختبار نفسه. حاول استخدام محددات مؤهل بشكل كامل، أو استخدام URI النسبي مع الأخذ بعين الاعتبار حيث الطبقة الاختبار.

لا يمكن استخدام المصانع XML CLASSPATH مثل <وأ href = "http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/context/support/ClassPathXmlApplicationContext.html" يختلط = "نوفولو noreferrer"> ClassPathXmlApplicationContext ؟

وحل آخر ممكن هو تكرار services-config.xml وإعادة تسمية كما services-config-test.xml ثم وضعت تحت CLASSPATH. الشيء نفسه ينطبق على ملف الممتلكات.

ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[] { "WebRoot/WEB-INF/services-context.xml"})
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top