OpenJPA ، Jersey ، Junit: باستخدام وحدة ثبات مختلفة لاختبارات وحدتي؟

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

سؤال

أقوم ببناء تطبيق باستخدام OpenJPA 2.0.0 و Jersey 1.3 و Junit 4.8.1.

لقد قمت بإعداده حتى لديّ وحدتان مختلفتان للثبات المحددة في ثباتي. xml: "الافتراضي" و "Unittest". يتم إعداد الافتراضي للاتصال بمثيل Oracle ، بينما يتم إعداد Unittest للاتصال بملف قاعدة بيانات مضمن H2DB المحلي. أقوم بذلك حتى أبدأ دائمًا اختبارات وحدتي باستخدام قاعدة بيانات نظيفة لها بعض البيانات المعروفة فيه ، والتي يمكن كتابتها فوق كل مجموعة من اختبارات الوحدة.

المشكلة هي أنني الآن أريد استخدام إطار اختبار Jersey لاختبار خدمات الويب الفعلية الخاصة بي ، بدلاً من مجرد الطبقات السفلية للبرنامج. لا تقوم فئات موارد الجذر الخاصة بي بتحميل وحدة الثبات غير المألوفة ، فهي دائمًا تقوم بتحميل الافتراضي.

لذا فإن ما يجب علي فعله هو الحقن في فئات الموارد الجذرية أيّ يجب استخدام وحدة الثبات لتثبيت EntityManager ، ومن ثم يكون لديك طريقة لضخ غيرها عندما أقوم بإجراء اختباراتي ولكنهم حقن الافتراضي على خلاف ذلك. لكن لا يمكنني التفكير في أي طريقة جيدة للقيام بذلك.

أنا جديد تمامًا على Java EE Development ، والذي قد يكون واضحًا.

أي مساعدة؟

هل كانت مفيدة؟

المحلول

أعتقد أنه يجب أن يكون من الممكن إنشاء ثبات ثانٍ. xml في SRC/Test/Resources/Meta-Inf.

إذا فهمت الأشياء بشكل صحيح ، فإن Maven ستضع فئات الهدف/الاختبار في Classpath قبل الهدف/الفئات ، بحيث يتم قراءة اختبار xml في اختبار الوحدة. وبهذه الطريقة يمكنك استخدام نفس اسم وحدة الثبات ، ولكن بتكوين مختلف.

src/main/resources/
    META-INF
        persistence.xml  <-- for actual application

src/test/resources/
    META-INF
        persistence.xml  <-- for unit tests

تعديل:

عفوًا ، تم خداعني للاعتقاد بأنك استخدمت Maven من خلال الإجابة الأخرى. إذا لم تكن كذلك ، فنسى ما قلته ...

نصائح أخرى

هل تستخدم Maven؟ إذا كانت الإجابة بنعم ، فهناك خدعة تتيح لك "قراءة" قيمة POM في فئة Java الخاصة بك. لقد كان مفيدًا جدًا بالنسبة لي ، فسيتعين عليك فقط تعيين اسم وحدة الثبات في POM الخاص بك ، وهو اسم مختلف أثناء الاختبار ، وهذا كل شيء.

متغيرات Maven في سياق Java

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top