سؤال

في العمل، مازلنا حاليًا نستخدم JUnit 3 لإجراء اختباراتنا.لقد كنا نفكر في التبديل إلى JUnit 4 لـ جديد يتم كتابة الاختبارات ولكني أراقب TestNG منذ فترة.ما هي التجارب التي مررتم بها جميعًا مع JUnit 4 أو TestNG، والتي يبدو أنها تعمل بشكل أفضل مع عدد كبير جدًا من الاختبارات؟إن التمتع بالمرونة في كتابة الاختبارات أمر مهم أيضًا بالنسبة لنا نظرًا لأن اختباراتنا الوظيفية تغطي جانبًا واسعًا وتحتاج إلى كتابتها بطرق متنوعة للحصول على النتائج.

لن يتم إعادة كتابة الاختبارات القديمة لأنها تؤدي وظيفتها على ما يرام.ما أود رؤيته في الاختبارات الجديدة هو المرونة في طريقة كتابة الاختبار، والتأكيدات الطبيعية، والتجميع، وتنفيذ الاختبارات الموزعة بسهولة.

هل كانت مفيدة؟

المحلول

لقد استخدمت كليهما، ولكن يجب أن أتفق مع Justin Standard على أنه لا ينبغي عليك التفكير في إعادة كتابة اختباراتك الحالية إلى أي تنسيق جديد.وبغض النظر عن القرار، فمن السهل جدًا تشغيل كليهما.يسعى TestNG إلى أن يكون أكثر قابلية للتكوين من JUnit، لكن في النهاية يعمل كلاهما بشكل جيد على قدم المساواة.

يتمتع TestNG بميزة رائعة حيث يمكنك وضع علامة على الاختبارات كمجموعة معينة، ثم تشغيل جميع اختبارات مجموعة معينة بسهولة، أو استبعاد اختبارات مجموعة معينة.وبالتالي يمكنك وضع علامة على الاختبارات التي تعمل ببطء كما هو الحال في المجموعة "البطيئة" ثم تجاهلها عندما تريد نتائج سريعة.أحد الاقتراحات من وثائقهم هو وضع علامة على بعض المجموعات الفرعية على أنها اختبارات "تسجيل الوصول" والتي يجب تشغيلها كلما قمت بإيداع ملفات جديدة.لم أر قط مثل هذه الميزة في JUnit، ولكن مرة أخرى، إذا لم تكن لديك، فلن تفوتها حقًا.

على الرغم من كل ادعاءاتها بالتكوين العالي، فقد واجهت مشكلة زاوية منذ بضعة أسابيع حيث لم أتمكن من فعل ما أردت القيام به...أتمنى أن أتذكر ما هو، ولكني أردت أن أذكره حتى تعرف أنه ليس مثاليًا.

أكبر ميزة لدى TestNG هي التعليقات التوضيحية...التي أضافتها JUnit في الإصدار 4 على أي حال.

نصائح أخرى

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

استخدم ما يبدو أكثر طبيعية ويساعدك على إنجاز عملك.

لا يمكنني التعليق على TestNG b/c، فأنا لم أستخدمه.ولكن أود أن أوصي وحدات, ، مجمع رائع لـ JUnit/TestNG/DBUnit/EasyMock، بغض النظر عن المسار الذي تسلكه.(يدعم جميع النكهات المذكورة أعلاه)

منذ حوالي عام، واجهنا نفس المشكلة.قضيت بعض الوقت في التفكير في الخطوة الأفضل، وأدركنا في النهاية أن TestNG لا يحتوي على "ميزات قاتلة".إنه جميل، ويحتوي على بعض الميزات التي لا تتوفر في JUnit 4، لكننا لا نحتاج إليها.
لم نرغب في أن يشعر الناس بعدم الارتياح عند كتابة الاختبارات أثناء التعرف على TestNG لأننا أردنا منهم الاستمرار في كتابة الكثير من الاختبارات.
كما أن JUnit هو إلى حد كبير المعيار الفعلي في عالم Java.لا توجد أداة مناسبة لا تدعمها من العلبة، ويمكنك العثور على الكثير من المساعدة على الويب وقد أضافوا الكثير من الميزات الجديدة في العام الماضي مما يدل على أنها لا تزال حية.

قررنا التمسك بـ JUnit ولم ننظر إلى الوراء أبدًا.

تتضمن أكبر بطاقات السحب الخاصة بـ TestNG بالنسبة لي مجموعات اختبار الدعم، والأهم من ذلك - تبعيات مجموعة الاختبار (وضع علامة على الاختبار على أنه يعتمد على مجموعة يؤدي إلى تخطي الاختبارات ببساطة للتشغيل عندما تفشل المجموعة التابعة).

تتضمن بطاقات السحب الكبيرة الأخرى من TestNG بالنسبة لي معلمات الاختبار، وموفري البيانات، ومحولات التعليقات التوضيحية، وأكثر من أي شيء آخر - مجتمع المستخدمين النابض بالحياة وسريع الاستجابة.

على الرغم من أنه قد لا يعتقد المرء ظاهريًا أن جميع ميزات TestNG المذكورة أعلاه قد لا تكون ضرورية، بمجرد أن تبدأ في فهم المرونة التي توفرها اختباراتك، فسوف تتساءل عن كيفية تعاملك مع JUnit.

(إخلاء المسؤولية - لم أستخدم JUnit 4.x على الإطلاق، لذلك لا أستطيع التعليق حقًا على التطورات أو الميزات الجديدة هناك).

تحياتي لجميع ما سبق.بعض الأشياء الأخرى التي وجدتها شخصيًا أحبها أكثر في TestNG هي:

  1. ال @BeforeClass لأن TestNG يحدث بعد إنشاء الفصل الدراسي، لذلك لا تكون مقيدًا بالقدرة على استدعاء الأساليب الثابتة لفصلك فيه فقط.

  2. الاختبارات الموازية والمعلمات، ربما ليس لدي ما يكفي من الحياة ...لكنني حصلت على ركلة كتابة مجموعة واحدة من اختبارات السيلينيوم، وقبول اسم السائق كمعلمة.ثم تحديد 3 مجموعات اختبار متوازية، واحدة لكل من برامج تشغيل IE وFF وChrome، ومشاهدة السباق!لقد قمت في الأصل بـ 4 صفحات، ولكن هناك الكثير من الصفحات التي عملت عليها تتعطل HtmlUnit سائق لسبب أو لآخر.

نعم، ربما تحتاج إلى العثور على تلك الحياة.;)

أردت أن أشارك الشخص الذي واجهته اليوم.لقد وجدت أن العداء ذو ​​المعلمات المضمنة خام جدًا في Junit4 مقارنةً بـ TestNG (أعلم أن كل إطار عمل له نقاط قوته ولكن لا يزال).يقتصر التعليق التوضيحي Junit4 @parameters على مجموعة واحدة من المعلمات.لقد واجهت هذه المشكلة أثناء اختبار السلوك الصالح وغير الصالح للوظيفة في نفس فئة الاختبار.لذلك سيتم استخدام أول طريقة عامة وثابتة مع تعليقات توضيحية تجدها، ولكن يمكنها العثور عليها بأي ترتيب.هذا يجعلنا نكتب فئات مختلفة دون داع.ومع ذلك، يوفر TestNG طريقة نظيفة لتوفير أنواع مختلفة من موفري البيانات لكل طريقة.حتى نتمكن من اختبار نفس وحدة التعليمات البرمجية بطريقة صالحة وغير صالحة في نفس فئة الاختبار مع وضع البيانات الصالحة/غير الصالحة بشكل منفصل.سأذهب مع TestNG.

هناك أيضًا ميزة أخرى لـ TestNG وهي دعم الاختبار المتوازي.أعتقد أن هذا أمر مهم في عصرنا المليء بالنوى المتعددة.

لقد استخدمت أيضًا كلا الإطارين.لكنني أستخدم hamcrest للتأكيدات.يتيح لك Hamcrest كتابة طريقة التأكيد الخاصة بك بسهولة.لذلك بدلا من

assertEquals(operation.getStatus(), Operation.Status.Active);

يمكنك كتابة

assertThat(operation, isActive());

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

بعض الإضافات إلى رد مايك ستون:

1) الشيء الأكثر شيوعًا الذي أستخدم فيه مجموعات TestNG هو عندما أرغب في تشغيل طريقة اختبار واحدة في مجموعة اختبار.أقوم ببساطة بإضافة هذا الاختبار إلى المجموعة "phil" ثم قم بتشغيل هذه المجموعة.عندما كنت أستخدم JUnit 3، كنت سأعلق على الإدخالات لجميع الطرق باستثناء تلك التي أردت تشغيلها في طريقة "المجموعة"، ولكن بعد ذلك أنسى عادة إلغاء التعليق عليها قبل تسجيل الوصول.مع المجموعات، لم يعد لدي هذه المشكلة.

2) اعتمادًا على مدى تعقيد الاختبارات، يمكن إجراء ترحيل الاختبارات من JUnit3 إلى TestNG تلقائيًا إلى حد ما باستخدام sed وإنشاء فئة أساسية لتحل محل TestCase الذي يستورد جميع أساليب تأكيد TestNG.

لدي معلومات حول هجرتي من JUnit إلى TestNG هنا و هنا.

JUnit 4 Vs TestNG – مقارنة بواسطة mkyong.com (تم التحديث في 2013).

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

تم تصميم TestNG للاختبار الوظيفي عالي المستوى واختبار التكامل المعقد.مرونتها مفيدة بشكل خاص مع مجموعات الاختبار الكبيرة.

فضلاً عن ذلك، يغطي TestNG أيضًا وظائف JUnit4 الأساسية بالكامل.إنه ليس سببًا بالنسبة لي لاستخدام JUnit بعد الآن.

In simple terms, TestNG = JUnit + lot more...So, Why debate ? go and grab TestNG :-)

يمكنك العثور على مقارنة أكثر تفصيلا هنا.

يعجبني التكامل الأنيق والسهل لـ TestNG مع Guice.

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

حسنًا، أولاً، كانت JUnit تلعب دور اللحاق بـ TestNG من حيث الوظائف، لقد قاموا بسد الفجوة مع الإصدار 4، ولكن ليس جيدًا بما يكفي في رأيي.لا تزال أشياء مثل التعليقات التوضيحية وموفري البيانات أفضل بكثير في TestNG.كما أنها أكثر مرونة من حيث تنفيذ الاختبار، نظرًا لأن TestNG لديه تبعية الاختبار والتجميع والترتيب.

لا تزال JUnit تتطلب أساليب معينة قبل/بعد لتكون ثابتة، مما يحد مما يمكنك القيام به قبل تشغيل الاختبارات، ولم تواجه TestNG هذه المشكلة أبدًا.

حسنًا، في الغالب لا تعني الاختلافات بين الإطارين الكثير، إلا إذا كنت تركز على اختبار التكامل/الأتمتة.تم بناء JUnit من تجربتي من الألف إلى الياء لاختبار الوحدة ويتم الآن دفعه نحو مستويات أعلى من الاختبار، الأمر الذي جعل IMO منه الأداة الخاطئة للمهمة.يعمل TestNG بشكل جيد في اختبار الوحدة، ونظرًا لتوفيره القوي للبيانات وقدراته الرائعة على تنفيذ الاختبار، فإنه يعمل بشكل أفضل على مستوى اختبار التكامل/الأتمتة.

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

لقد نسيت تقريبًا، استخدم أيضًا اختبار نمط منشئ البيانات, ، يعد هذا بالإضافة إلى التعليق التوضيحي لموفر البيانات الخاص بـ TestNG مفيدًا جدًا.

رأيي حول ما يجعل TestNG أقوى بكثير:

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.

لماذا نستخدم TestNG بدلاً من JUnit؟

  1. إعلان @BeforeClass و @AfterClass يجب أن تكون الطريقة ثابتة في JUnit، حيث أن هناك مرونة أكبر في TestNG في إعلان الطريقة، ولا تحتوي على هذه القيود.

  2. في TestNG، يمكننا تحديد حدود الاختبارات باستخدام طريقتين.@Parameter أو @DataProvider تعليق توضيحي.

    أنا) @معامل للحالات البسيطة، حيث يكون تعيين القيمة الأساسية مطلوبًا. (يتم توفير البيانات من خلال ملف xml)

    ب) @DataProvider للحالات المعقدة.باستخدام مصفوفة ثنائية الأبعاد، يمكنها توفير البيانات.

  3. في TestNG، نظرًا لأن طريقة @DataProvider لا تحتاج إلى أن تكون ثابتة، فيمكننا استخدام طرق متعددة لموفر البيانات في نفس فئة الاختبار.

  4. اختبار التبعية: في TestNG، إذا فشل الاختبار الأولي، فسيتم تخطي جميع الاختبارات التابعة اللاحقة، ولن يتم وضع علامة عليها على أنها فاشلة.لكن JUnit وضعت علامة على أنها فشلت.

  5. التجميع: يمكن أن تنتمي الاختبارات الفردية إلى مجموعات متعددة ثم يتم تشغيلها في سياقات مختلفة (مثل الاختبارات البطيئة أو السريعة).توجد ميزة مماثلة في فئات JUnit ولكنها تفتقر إلى التعليقات التوضيحية @BeforeGroups / @AfterGroups TestNG التي تسمح بتهيئة الاختبار/تمزيقه.

  6. تماثل: إذا كنت ترغب في إجراء نفس الاختبار بالتوازي على عدة سلاسل رسائل، فإن TestNG يوفر لك تعليقًا توضيحيًا سهل الاستخدام بينما لا تقدم JUnit طريقة بسيطة للقيام بذلك خارج الصندوق.

  7. يمكن لـ TestNGDataProvider أيضًا دعم XML لتغذية البيانات أو ملفات CSV أو حتى الملفات النصية العادية.

  8. يتيح لك TestNG الإعلان عن التبعيات بين الاختبارات، وتخطيها إذا لم ينجح اختبار التبعية.

@Test(dependsOnMethods = { "dependOnSomething" })

هذه الوظيفة غير موجودة في JUnit

  1. التقارير:

يتم إنشاء تقارير TestNG افتراضيًا إلى مجلد إخراج الاختبار الذي يتضمن تقارير HTML مع جميع بيانات الاختبار، التي تم تمريرها/فشلها/تم تخطيها، ومدة تشغيلها، والمدخلات التي تم استخدامها، وسجلات الاختبار الكاملة.بالإضافة إلى ذلك، يقوم أيضًا بتصدير كل شيء إلى ملف XML والذي يمكن استخدامه لإنشاء قالب التقرير الخاص بك.

على واجهة JUnit، كل هذه البيانات متاحة أيضًا عبر XML، ولكن لا يوجد تقرير جاهز وتحتاج إلى الاعتماد على المكونات الإضافية.

رابط الموارد:

  1. مقارنة سريعة بين JUnit وTestNG
  2. جونيت مقابل.اختبار:ما هو إطار الاختبار الذي يجب عليك اختياره؟

يتم إعطاء فرق جيد في هذا البرنامج التعليمي جنبًا إلى جنب: TestNG مقابل JUnit:ماهو الفرق؟

كلاهما متماثلان تقريبًا.يحتوي TestNG على بعض الميزات الإضافية مثل بدلات الاختبار والتبعية.يرجى الاطلاع على لقطة الشاشة المرفقة للحصول على المقارنة الكاملة. المقارنة الكاملة بين Juni5 وTestNG

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top