[java] طريقة سهلة لتشغيل اختبار junit نفسه مرارا وتكرارا؟



Answers

لقد وجدت أن التعليق التكراري لـ Spring مفيد لهذا النوع من الأشياء:

@Repeat(value = 10)

الأحدث (Spring Framework 4.3.11.RELEASE API) doc:

Question

مثل العنوان يقول ، أنا أبحث عن طريقة بسيطة لتشغيل اختبارات JUnit 4.x عدة مرات في صف تلقائيا باستخدام Eclipse.

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

لدينا بالفعل طريقة معقدة للقيام بذلك ولكني أبحث عن طريقة بسيطة للقيام بذلك حتى أكون على يقين من أن الاختبار القاسي الذي كنت أحاول إصلاحه يبقى ثابتًا.

الحل المثالي هو أن يكون البرنامج المساعد / الإعداد / الميزة Eclipse التي لا أعلم عنها.




أي شيء خاطئ مع:

@Test
void itWorks() {
    // stuff
}

@Test
void itWorksRepeatably() {
    for (int i = 0; i < 10; i++) {
        itWorks();
    }
}

بخلاف الحالة التي تختبر فيها كل صف من القيم ، لا يهمك أي منها فشل.

لا داعي للقيام بالتهيئة أو التعليق التوضيحي لما يمكنك فعله في الكود.




يوجد تعليق توضيحي متقطع في مكتبة tempus-fugit التي تعمل مع @Rule JUnit 4.7 لتكرار الاختبار عدة مرات أو باستخدام @RunWith .

فمثلا،

@RunWith(IntermittentTestRunner.class)
public class IntermittentTestRunnerTest {

   private static int testCounter = 0;

   @Test
   @Intermittent(repition = 99)
   public void annotatedTest() {
      testCounter++;
   }
}

بعد تشغيل الاختبار (مع IntermittentTestRunner في @RunWith ) ، سيكون testCounter مساوياً لـ 99.




مع IntelliJ ، يمكنك القيام بذلك من تكوين اختبار. بمجرد فتح هذه النافذة ، يمكنك اختيار تشغيل أي عدد من المرات التي تريدها.

عند تشغيل الاختبار ، سيقوم intellij بتنفيذ جميع الاختبارات التي حددتها لعدد المرات التي حددتها.

مثال تشغيل اختبارات 624 10 مرات:




يمكنك تشغيل اختبار JUnit من خلال طريقة رئيسية وتكرار ذلك عدة مرات تحتاج إليها:

package tests;

import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.Result;

public class RepeatedTest {

    @Test
    public void test() {
        fail("Not yet implemented");
    }

    public static void main(String args[]) {

        boolean runForever = true;

        while (runForever) {
            Result result = org.junit.runner.JUnitCore.runClasses(RepeatedTest.class);

            if (result.getFailureCount() > 0) {
                runForever = false;
               //Do something with the result object

            }
        }

    }

}



Related