هل يوجد JUnit TestRunner لتشغيل مجموعات من الاختبارات؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

أستخدم حاليًا JUnit 4 وأحتاج إلى تقسيم اختباراتي إلى مجموعات يمكن تشغيلها بشكل انتقائي في أي مجموعة.أعلم أن TestNG لديه ميزة لإضافة تعليقات توضيحية للاختبارات لتعيينها إلى مجموعات، لكن لا يمكنني الانتقال إلى TestNG الآن.يبدو أنه يمكن تحقيق ذلك بسهولة في JUnit باستخدام بعض التعليقات التوضيحية المخصصة وJUnit TestRunner المخصص.لقد قمت بفحص كل من مستندات JUnit وبحثت في الويب ولكن لم أتمكن من العثور على شيء من هذا القبيل.هل أي شخص على علم بمثل هذا TestRunner؟

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

التحديث 2:إذا لم يكن لدى JUnit هذا OOB، فأنا أبحث عن مكتبة مفتوحة المصدر تضيف هذا إلى JUnit (التعليقات التوضيحية + مشغل اختبار JUnit المخصص).

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

المحلول

تحقق من الربيع SpringJUnit4ClassRunner.لقد استخدمته لإجراء اختبارات اختياريًا بناءً على خاصية النظام، باستخدام IfProfileValue حاشية. ملاحظة.

هذا:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

سيتم تشغيله إذا تم تعيين خاصية النظام "مجموعات الاختبار" على "اختبارات الوحدة" أو "اختبارات التكامل".

تحديث: JUnitExt لديه @Category و @Prerequisite التعليقات التوضيحية ويبدو أنها يجب أن تفعل ما تحتاجه.ومع ذلك، لم أستخدمها بنفسي أبدًا، لذا لا أستطيع أن أضمن ذلك.

نصائح أخرى

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

أولاً، أنت تعالج مشكلتين - اختبارات الوحدة (غالبًا ما تكون في نفس الحزمة مثل الوحدة قيد الاختبار) واختبارات التكامل.عادةً ما أحتفظ باختبارات التكامل الخاصة بي في حزمة منفصلة، ​​مثل com.example.project.tests.في الكسوف، تبدو مشاريعي كما يلي:

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

يؤدي النقر بزر الماوس الأيمن على الحزمة واختيار "تشغيل" إلى تشغيل الاختبارات في الحزمة؛يؤدي القيام بنفس الشيء على المجلد المصدر إلى تشغيل كافة الاختبارات.

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

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

بالطبع، يجب أن أبقي هذه الأشياء آلية.طريقة جيدة للقيام بذلك هي الاستخدام مهمة النملة.

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>

لا، للأسف لا يوجد مفهوم مماثل لمجموعات TestNG.كان مخططًا لـ JUnit4، ولكن لسبب غير واضح، تم إسقاطه من التخطيط.

يمكنك إنشاء مجموعات، على الرغم من أن ذلك يضع كل التكوينات في المجموعة، وليس في التعليقات التوضيحية.

يتيح لك JUnit 3 إنشاء مجموعات اختبار يمكن تشغيلها مثل أي اختبار آخر.أليس لدى JUnit 4 مفهوم مماثل؟

إذا كنت تستخدم ANT أو maven، فيمكنك التحكم في الاختبارات التي يتم إجراؤها عن طريق تصفية الاختبارات حسب الاسم.محرجًا بعض الشيء، لكنه قد يناسبك.

TestNG لديه صوتي.إنه يعتمد على التعليقات التوضيحية، ويمكن تشغيله كمجموعات، أو اختبارات فردية، وما إلى ذلك، ويمكن ربطه بـ Maven، ويمكنه تشغيل جميع اختبارات JUnit كجزء من عمليات التشغيل الاختبارية الخاصة به.

أنا أوصي به بشدة على JUnit.

نصيحتي هي ببساطة التخلص من JUnit واستخدام TestNG.بمجرد أن تعتاد على TestNG، تبدو Junit مثل العصر الحجري.

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