سؤال

هل يمكنني استخدام أكثر من طريقة واحدة مع @المعلمات في junit اختبار الصف الذي يعمل مع معلمات الصف ؟

@RunWith(value = Parameterized.class)
public class JunitTest6 {

 private String str;

 public JunitTest6(String region, String coverageKind,
        String majorClass, Integer vehicleAge, BigDecimal factor) {
    this.str = region;
 }

  @Parameters
 public static Collection<Object[]> data1() {
   Object[][] data = {{some data}}

   return Arrays.asList(data);
 }

 @Test
 public void pushTest() {
   System.out.println("Parameterized str is : " + str);
   str = null;
 }

 @Parameters
 public static Collection<Object[]> data() {
   Object[][] data = {{some other data}}
   return Arrays.asList(data);
 }

 @Test
 public void pullTest() {
   System.out.println("Parameterized new str is  : " + str);
   str = null;
 }
}
هل كانت مفيدة؟

المحلول

ويمكنك استخدام (والبحث عن كلمة النظريات في التي تصل) لتمرير معايير مختلفة لأساليب مختلفة.

نصائح أخرى

وربما طريقة data1، ولكن لا ضمان لذلك، فإنه سوف يستخدم أي واحد يعطي JVM junit4 أولا.

وهنا هو رمز ذات الصلة من أداة JUnit:

private FrameworkMethod getParametersMethod(TestClass testClass) throws Exception {
    List<FrameworkMethod> methods= testClass.getAnnotatedMethods(Parameters.class);
    for (FrameworkMethod each : methods) {
        int modifiers= each.getMethod().getModifiers();
            if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))
                return each;
    }

    throw new Exception("No public static parameters method on class " + testClass.getName());
}

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

وماذا لديك اختبار uour كتابة بهذه الطريقة؟ يجب أن يكون واحد طريقة المشروح @Parameters فقط.

إنه لم يعين لها أكثر من طريقة البيانات.يمكنك أن ترى ذلك في skaffman الجواب.

لماذا لا تقدم على تنفيذ البيانات اثنين الأساليب ؟
الجواب يمكن أن يكون:اقتران.

هو أكثر تعقيدا من أن تقسيم هذا الاختبار إلى اثنين testcases?سوف تكون قادرة على تقديم ميراث صغير وتبادل الأساليب الشائعة.مع اثنين من testcases كنت يمكن أن توفر اثنين فصل البيانات وطرق اختبار الأشياء الخاصة بك بشكل جيد للغاية.

وآمل أن يساعد.

ويمكنك إنشاء الطبقات الداخلية لكل مجموعة من الأساليب التي تعمل على نفس المعلمات. على سبيل المثال:

public class JunitTest6 {

 @RunWith(value = Parameterized.class)
 public static class PushTest{
  private String str;
  public PushTest(String region) {
   this.str = region;
  }

  @Parameters
  public static Collection<Object[]> data() {
   Object[][] data = {{some data}}

   return Arrays.asList(data);
  }

  @Test
  public void pushTest() {
   System.out.println("Parameterized str is : " + str);
   str = null;
  }
 }

 @RunWith(value = Parameterized.class)
 public static class PullTest{
  private String str;
  public PullTest(String region) {
   this.str = region;
  }

  @Parameters
  public static Collection<Object[]> data() {
   Object[][] data = {{some other data}}
   return Arrays.asList(data);
  }

  @Test
  public void pullTest() {
   System.out.println("Parameterized new str is  : " + str);
   str = null;
  }
 }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top