أحتاج إلى طريقة لإدخال معلمة مخصصة في طرق اختبار TestNG. المعلمة هي كائن خاص بي يتم إنشاؤه ديناميكيًا في وقت التشغيل من التعليقات التوضيحية لأسلوب الاختبار . المعلمة المخصصة غير معروفة لـ TestNG ، إنها من النوع الخاص بي ، على سبيل المثال:
@com.mypackage.MyAnnotation("someValue)"
@org.testng.Test
public void test(MyCustomObject val) {
...
}
يبدو الآن أنني لا أستطيع القيام بذلك بسهولة.
هل يمكننا إضافة هذه الوظيفة / SPI؟ ما هي أسهل طريقة حالية لتحقيق ذلك؟
لا أريد استخدام تعليق DataProvider .
لماذا لا تريد استخدام DataProvider ، فهو أسهل طريقة حتى الآن
(فقط بضعة أسطر من التعليمات البرمجية).
سيدريك
يوم الثلاثاء ، 3 مارس 2015 الساعة 6:09 صباحًا ، Crazyjavahacking [email protected]
كتب:
_لا أريد استخدام التعليق التوضيحي
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/cbeust/testng/issues/612#issuecomment -76951265.
تكمن المشكلة في أن الكائن الذي أريد إدخاله يتم إنشاؤه ديناميكيًا استنادًا إلى البيانات الموجودة داخل التعليقات التوضيحية في طريقة الاختبار.
في المثال الأولي الخاص بي ، أحتاج إلى تحليل محتوى @MyAnnotation
وبناءً على ذلك أحتاج إلى إنشاء مثيل MyCustomObject
.
ما الذي يمنعك من القيام بكل ذلك في مزود البيانات؟
سيدريك
يوم الثلاثاء ، 3 مارس 2015 الساعة 3:12 مساءً ، Crazyjavahacking [email protected]
كتب:
المشكلة هي أن الكائن الذي أريد حقنه يتم إنشاؤه ديناميكيًا
بناءً على البيانات الموجودة داخل التعليقات التوضيحية على طريقة الاختبار.في المثال الأولي ، أحتاج إلى تحليل محتوى MyAnnotation و
بناءً على ذلك ، أحتاج إلى إنشاء مثيل MyCustomObject.قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/cbeust/testng/issues/612#issuecomment -77060429.
الوظيفة ليست اختبارًا محددًا في الواقع ولا أريد أيضًا استخدام موفري البيانات ، على سبيل المثال:
@Columns("col1 | col2 || val)"
<strong i="6">@Rows</strong> ({"a | b || c",
"d | e || f})
@org.testng.Test
public void test1(MyCustomObject val) {
// MyCustomerObject is created from the annotation values
// some menipulation with val ...
}
@Columns("col1 | col2 || val)"
<strong i="7">@Rows</strong> ({"1 | 2 || a",
"3 | 3 || b})
@org.testng.Test
public void test1(MyCustomObject val) {
// MyCustomerObject is created from the annotation values
// some menipulation with val ...
}
لذلك لا أعتقد أن موفري البيانات نهج جيد هنا
سيكون مفيدا جدا لدي نفس الاحتياجات
الفكرة مثيرة للاهتمام ولكن كما قال cbeust منذ وقت طويل ، فإن مزود البيانات هو حل بديل جيد.
حسب العينة السابقة:
@Columns("col1 | col2 || val)")
@Rows( {"a | b || c",
"d | e || f"})
@Test(dataProvider = "dp")
public void test1(MyCustomObject val) {
// MyCustomerObject is created from the annotation values
// some menipulation with val ...
}
@Columns("col1 | col2 || val)"
@Rows( {"1 | 2 || a",
"3 | 3 || b"})
@Test(dataProvider = "dp")
public void test1(MyCustomObject val) {
// MyCustomerObject is created from the annotation values
// some menipulation with val ...
}
<strong i="8">@DataProvider</strong>
public static MyCustomObject[] dp(Method m) {
Columns colums = m.getAnnotation(Columns.class);
Rows rows = m.getAnnotation(Rows.class);
MyCustomObject[] results = new MyCustomObject[rows.values().length];
for (int i=0; i < rows.values().length; i++) {
String value = rows.values()[i];
// extract params with custom business
results[i] = new MyCustomObject(/* params */);
}
return results;
}
هذا صحيح juherr ، لقد
أعتقد أن مزيجًا من dataProvider وإضافة القدرة على تعيين مزود افتراضي أو فئة مزود خدمة افتراضية سيفي بالغرض وسيفتح فجوة في إمكانيات جديدة
@ g13013 تقصد شيئًا مثل
public class UseMyDataProvider implements IAnnotationTransformer {
public void transform(ITest annotation, Class testClass, Constructor testConstructor, Method testMethod) {
if (/* business logic (for example: testMethod has expected annotations) */) {
annotation.setDataProviderClass(MyExternalClassWithDataProvider.class);
annotation.setDataProvider("dataprovider name");
}
}
}
أود أيضًا أن أتمكن من استخدام Guice لحقن المعلمات في الاختبارات.
DataProvider + IAnnotationTransformer هو حل بديل مثير للاهتمام ولكنه يفتقر إلى المرونة (على سبيل المثال ، من المستحيل تعيين IAnnotationTransformer عبر Listeners)
من المستحيل ضبط IAnnotationTransformer عبر
@Listeners
gjuillot يمكن أن يكون طلب ميزة. هل يمكنك فتح مشكلة في ذلك؟
سوف افعل. ولكن مع ذلك ، فإن أفضل ما بالنسبة لي هو إمكانية استخدام Guice لحقن المعلمات في الاختبارات.
التعليق الأكثر فائدة
سيكون مفيدا جدا لدي نفس الاحتياجات