@المعلمات في Junit 4
-
05-07-2019 - |
سؤال
هل يمكنني استخدام أكثر من طريقة واحدة مع @المعلمات في 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;
}
}
}