Testng: Test (ممكّن = خطأ) التعليق التوضيحي على مستوى الفصل يجب أن يعطل جميع الطرق في الفصل

تم إنشاؤها على ٢١ ديسمبر ٢٠١١  ·  20تعليقات  ·  مصدر: cbeust/testng

منسوخ من http://code.google.com/p/testng/issues/detail؟id=102

تم الاختبار مع TestNG 6.3.1 أيضًا

ما هي الخطوات التي سوف تتكاثر هذه المشكلة؟
لدي فصل اختبار مثل هذا:

@ الاختبار (ممكّن = خطأ)
فئة عامة MyTest {
DataProvider (الاسم = "bla")
كائن خاص [] [] bla () {
إرجاع كائن جديد [] [] {
كائن جديد [] {"bla"}
} ؛
}

Test (dataProvider = "bla")
صرخات باطلة عامة (سلسلة bla) {
System.out.println (bla) ؛
}
}

ما هو الناتج المتوقع؟
أتوقع طريقة مهجورة لا تعمل ولا إخراج وحدة التحكم. وبدلاً من ذلك ، أطلق الثرثرة وطباعة "bla".

ما هو إصدار المنتج الذي تستخدمه؟
لقد اختبرت مع testng 5.11 / 6.0.1 ، يعمل من maven 2.2.1 / 3.0.3 مع البرنامج المساعد Surefire 2.7.2.

يرجى تقديم أي معلومات إضافية أدناه.

ال 20 كومينتر

مرحبًا نيكولاس ،

يجب أن ترى هذا إذا كنت لا تستخدم أي طريقة Test على enabled السمة الافتراضية صحيح ، ومن هنا يأتي السلوك الذي تراه.

هل لهذا معنى؟

نعم ، شكرا سيدريك.

أفترض خطأً أن التعليق التوضيحيtest (ممكّن = خطأ) في الفصل يستبعد الفئة تمامًا من التنفيذ

أوافق على أنه غير بديهي بعض الشيء ، لكن فات الأوان للتغيير الآن ، للأسف ...

مرحبًا سيدريك!
ماذا عن إضافة معلمة جديدة إلى Test الشرح
بهذه الطريقة نحافظ على التوافق مع الإصدارات السابقة ونوفر وظائف مفيدة جدًا في نفس الوقت.
إذا كنت ترغب في ذلك ، يمكنني تنفيذه بنفسي وتقديم طلب سحب.
شكرا لك مقدما!

@ andronix83 ،

أخشى أن هذا يجعل الأمور أكثر إرباكًا الآن لأنك تحتاج إلى شرح الفرق الدقيق بين enabled و enabledClass .

السلوك الحالي enabled ليس هو الأكثر بديهية ولكن لا يبدو أنه مشكلة بشكل عام ، إذا حكمت من خلال عدد المرات التي أثيرت فيها هذه المشكلة (نادرًا ما يكون).

مرحبا سيدريك ،

لقد واجهت بالفعل هذه المشكلة مؤخرًا في الأسبوع الماضي. أنا أعمل على خادم ويب يعتمد على Facebook Graph API. كان لدي فصل اختبار يحتوي على بعض طرق الاختبار التي تعتمد على الكود الذي يصل إلى واجهة برمجة تطبيقات الرسم البياني ، مع طرق اختبار أخرى لا تحتاج إلى الاعتماد على تلك الخدمة على الإطلاق. بعد ذلك ، كان هناك انقطاع عالمي في Facebook ككل لأكثر من ساعة. أدى ذلك إلى فشل بعض الاختبارات في هذه الفئة.

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

من الناحية المثالية ، يدعم TestNG نوعًا من الوظائف المشابهة للتعليق التوضيحي لـ http://junit.sourceforge.net/javadoc/org/junit/Ignore.html. باختصار ، يرغب المطورون بالفعل في هذه الوظيفة.

شكرا لك.

ecbrodie هذا مدعوم بالفعل ( @Test ستعيد تمكين الاختبار.

@Test(enabled = false)
public class T {
  void f() {} // will not run
}
@Test(enabled = false)
public class T {
  <strong i="10">@Test</strong>
  void f() {} // WILL run!
}

هذا يرجع إلى الدلالات التي تتجاهل السمات على مستوى الطريقة السمات المحددة على مستوى الفصل ، لذا فإن التعليق التوضيحي على مستوى الطريقة @Test يشير بشكل أساسي إلى @Test(enabled = true) لأنه القيمة الافتراضية ...

من المنطقي؟

مرحبًا cbeust ، شكرًا على هذا المثال ، ولكن هذا كان بالفعل فهم المشكلة ، لذلك أعتقد أنك ربما أساءت فهمي. كانت هذه النقطة التي كنت أحاول توضيحها ، بالنظر إلى دلالاتTest الحالية (ممكّن = صحيح / خطأ) والرغبة في الحصول على طريقة لتحديد تجاوز ممكّن على مستوى الفصل الدراسي لتجاهل كل ما تم تعيينه في الطريقة المستوى ، ربما حان الوقت لإعادة النظر في موقفك ضد إضافة نوع ما من قيمة التعليق التوضيحي enabledClass .

يبدو أنك تشير إلى بعض الازدراء تجاه النهج الأصلي الذي اتبعته معTest (ممكّن) دلالات. إذا كان هذا هو الحال بالفعل ، فلماذا لا تجلب دلالاته إلى شيء تشعر أنه أكثر سهولة؟

متفق عليه ، أعتقد أن @Test(enabledClass = false) سيكون منطقيًا وهي الطريقة الوحيدة لتنفيذ اقتراحك دون كسر التوافق مع الإصدارات السابقة. يجب أن يكون من السهل جدا أيضا.

ربما ترغب أنت أو juherr في تقديم العلاقات العامة؟

أنا لا أشعر أنني بحالة جيدة. لا أحب فكرة إضافة سمة جديدة تستخدم فقط في الفصل.
بعد ذلك ، أعتقد أن enable=false هو ممارسة سيئة عند استخدامه في المصدر لأنه سيتعين عليك تعديل المصادر عندما تريد إجراء الاختبارات.
IMO ، إذا كنت تريد إلغاء تحديد فئة ، فيجب استخدام testng.xml بدلاً من ذلك.
ecbrodie كيف تجري اختباراتك؟

راجع للشغل ، ما أقترحه بدلاً من ذلك هو توفير تطبيق IAnnotationTransformer والذي سيتجاوز السلوك الافتراضي لـ enable=false في الفصل.
IAnnotationTransformer لديه فقط enable=false كل اختبار إذا كان الفصل يحتوي على enable=false .
لن يكسر التوافق مع الإصدارات السابقة ولن يضيف معلمة معينة.
cbeust ما رأيك؟

juherr Cool PR ، من السهل جدًا فعل ذلك باستخدام IAnnotationTransformer .

قلقي الوحيد هو أنه بالنسبة للمستخدم ، يكون استخدامه أكثر غموضًا ، بدلاً من السمة enabledClass .

لاحظ أن لدينا بالفعل بعض السمات التي لا تنطبق إلا على مستوى الفصل الدراسي ( suiteName ، testName ).

كما قلت ، لا أحب حالة الاستخدام. وأعتقد أنه سيكون كافياً لشخصين فقط طلباه في السنوات الأربع الماضية :)

juherr عادل بما فيه الكفاية.

ecbrodie ما رأيك في العلاقات العامة؟

https://github.com/cbeust/testng/pull/816

تضمين التغريدة
فضولي فقط. ماذا لو قدمنا ​​محولًا مدمجًا للتعليقات التوضيحية يمكنه القيام بذلك؟

نعم ، هذا ما يقترحه # 816

تضمين التغريدة
شكرا لتقاسم هذه المعلومات العلاقات العامة. أي سبب لماذا هذا ينتظر الدمج؟

ماذا لو كان لدي سيناريو على النحو التالي:

@Test(groups = { "regression", "smoke" }, dependsOnGroups = { "Creation" })
public class EditName {

    @Test(dataProvider="SomeTestData",dataProviderClass=SearchData.class)
    public void TC_1(String Msg) throws Exception{
        System.out.println(Msg);
    }

    @Test(dataProvider="SomeTestData",dataProviderClass=SearchData.class, dependsOnMethods = { "TC_1" }))
    public void TC_2(String Msg) throws Exception{
        System.out.println(Msg);
    }
}
  1. هل تنتمي TC_1 و TC_2 إلى كل من مجموعات الانحدار والتدخين؟
  2. هل سيعتمد كل من TC_1 و TC_2 على مجموعة "إنشاء"؟
  3. هل سيعتمد TC_2 على مجموعة "الإنشاء" بالإضافة إلى TC_1 ، أم على TC_1 فقط؟

@ Rameshwar-Juptimath ما هي العلاقة بينك عينة وهذه المسألة؟

بسبب هذه السلوكيات غير البديهية لـ Test على مستوى الفصل والطريقة.
ما الذي يجب التوصية به كأفضل ممارسة؟
هل يجب أن نتجنب استخدام كليهما في الاختبارات؟
شرط أن نستخدمها بشكل أو بآخر على مستوى الطريقة للحصول على مزود بيانات مختلف لكل حالة ، هل يجب أن نتجنب وجودها في الفصل؟
أفكار؟

aliciatang السلوك هو نفسه بالنسبة لجميع سمات التعليقات التوضيحية: القيم الموجودة في الطريقة ستتجاوز القيم الموجودة في الفئة.

منذ 6.13 يمكنك استخدام @Ignore وهو السلوك الذي تتوقعه. يمكن العثور على وثائق @Ignore هنا

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات