سؤال

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

المشكلة هي أن كل مشروع EJB لديه اختبارات جونيت التي تحقق من EJB. في الوقت الحالي، لا تكون هذه الاختبارات مفيدة للغاية لأنها تحاول الاتصال بخادم التطبيق (JBOSS) وتنفيذ الأساليب من واجهة EJB.

هل هناك أي طريقة يمكنني بناء EJBS، وبناء ونشر الأذن ثم قم بتشغيل جميع الاختبارات من جميع EJBs مقابل خادم التطبيق؟

في الوقت الحالي، أقوم الآن بتحريض AP في الاختبارات عن طريق بدء فئات تنفيذ EJB و "حقن" يدويا "حقن" (someejbimpl.em = EntityManager ....) وهو أمر مزعج للغاية، لأن لدينا تبعيات هائلة بينهما وعليها التعامل معها المعاملات بنفسي.

هل هناك أي طريقة أخرى لتشغيل اختبارات EJB ضد ريال AP؟ قد يتم نشر الأذن بعد وحدة EJB مع مجموعة فرعية من وحدات EJB التي تم بناؤها بالفعل؟ ولكن كيف ؟

قد يتم ضبطها على تشغيل اختبارات مافن لجميع وحدات EJB كجزء من اختبارات الأذن؟ كيف نفعل ذلك ؟

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

المحلول

هذه ليست مشكلة بسيطة، وليس هناك إجابة سهلة. نأمل أن هذه المؤشرات سوف تساعد.

أعتقد أن أفضل استراتيجيتك هي فصل الاختبارات الخاصة بك إلى اختبارات الوحدة الأصلية - تلك التي يمكن تشغيلها بمعزل بدون حاوية، ونقل الاختبارات التي تتطلب الحاوية في اختبارات التكامل.

يمكنك استخدام EJB3UNIT. لزيادة الاختبارات التي لا تحتاج إلى تشغيل حاوية. يساعد على وهمي بعض التبعيات المعقدة. EJB3UNIT لديه مساعد مافن توثيق للحصول على التفاصيل التي تتوصل إلى مستودع Maven الخاص بهم.

يمكن أن تساعد أطر السخرية الأخرى مثل JMOCK أيضا. يمكنك وهمية الفصول وكذلك واجهات إذا كنت تستخدم classimposteriser..

بالنسبة لتلك الاختبارات التي تحتاج إلى حاوية EJB، يمكنك تكوين هذه لتشغيلها اختبارات التكامل, ، قد يكون من المنطقي نقلها إلى مشروع منفصل، اعتمادا على العلاقات بين مشاريع EJB الخاصة بك.

من الممكن إطلاق مثيل مبتذل مضمنا في اختبارات Junit الخاصة بك وإضافة servlets برمجيا إليها. بالطبع Jetty ليس حاوية EJB، ستحتاج إلى حاوية EJB مثل Openejb..

لتكوين OpenEJB في Jetty، استخدم تكوين مثل هذا:

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <configuration>
    <scanIntervalSeconds>5</scanIntervalSeconds>
    <contextPath>/example</contextPath>
    <systemProperties>
      <systemProperty>
        <name>java.naming.factory.initial</name>
        <value>org.apache.openejb.client.LocalInitialContextFactory</value>
      </systemProperty>
      <systemProperty>
        <name>java.naming.factory.url.pkgs</name>
        <value>org.mortbay.naming</value>
      </systemProperty>
    </systemProperties>
  </configuration>
</plugin>

ستكون تصريحات التبعية ل Openejb:

<dependency>
  <groupId>org.apache.openejb</groupId>
  <artifactId>openejb-core</artifactId>
  <version>3.1</version>
  <scope>test</scope>
</dependency>

تستطيع ايضا استخذام السيلينيوم للمساعدة في الاختبارات الوظيفية (على افتراض أنك حصلت على هذا الأمر بعيدا)، إليك دليل باستخدام السيلينيوم والنفاثة و Openejb لنفعل ذلك.

نصائح أخرى

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