OpenJPA ، Jersey ، Junit: باستخدام وحدة ثبات مختلفة لاختبارات وحدتي؟
-
28-09-2019 - |
سؤال
أقوم ببناء تطبيق باستخدام 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 الخاص بك ، وهو اسم مختلف أثناء الاختبار ، وهذا كل شيء.