سؤال

كيف يمكن تعطيل اختبارات الوحدة الفردية مؤقتًا عند استخدام unittest وحدة في بيثون؟

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

المحلول

يمكن تعطيل طرق الاختبار الفردية أو الفئات باستخدام unittest.skip ديكور.

@unittest.skip("reason for skipping")
def test_foo():
    print('This is foo test case.')


@unittest.skip  # no reason needed
def test_bar():
    print('This is bar test case.')

للحصول على خيارات أخرى ، راجع المستندات تخطي الاختبارات والفشل المتوقع.

نصائح أخرى

يمكنك استخدام Decorators لتعطيل الاختبار الذي يمكنه لف الوظيفة ومنع اختبار وحدة Googletest أو Python لتشغيل testcase.

def disabled(f):
    def _decorator():
        print f.__name__ + ' has been disabled'
    return _decorator

@disabled
def testFoo():
    '''Foo test case'''
    print 'this is foo test case'

testFoo()

انتاج:

testFoo has been disabled

أحدث إصدار (2.7 - غير منشور) يدعم اختبار تخطي/تعطيل مثل ذلك. يمكنك فقط الحصول على هذه الوحدة واستخدامها على تثبيت Python الحالي. ربما ستعمل.

قبل ذلك ، اعتدت إعادة تسمية الاختبارات التي أردت تخطيها xtest_testname من عند test_testname.


إليك نص ELISP السريع للقيام بذلك. بلدي elisp هو صدئ بعض الشيء لذلك أعتذر مقدمًا عن أي مشاكل تواجهها. لم يخبر.

  (defun disable_enable_test ()
  (interactive "")
  (save-excursion
    (beginning-of-line)
    (search-forward "def")
    (forward-char)
    (if (looking-at "disable_")
    (zap-to-char 1 ?_)
      (insert "disable_"))))

ببساطة وضع @unittest.SkipTest ديكور فوق الاختبار يكفي.

أنا فقط أعيد تسمية طريقة حالة الاختبار باستخدام السطح السفلي: test_myfunc يصبح _test_myfunc.

ال مستندات لـ 2.1 لا تحدد طريقة تجاهل أو تخطي.

عادة ما أقوم بتعليق التعليق عند الحاجة.

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

لحالة الاستخدام الخاصة بي ، يكمن الحل في عداء الاختبار ، وليس في رمز الاختبار. أنا أستعمل Pytest. مع Pytest ، من السهل تحديد اختبار واحد من سطر الأوامر:

pytest python_filename.test_class.test_name

(استبدل CAPS بقيمك).

أنا أفهم أن هذا السؤال كان ل python-Unitest. لم أستخدم ذلك منذ وقت طويل. لن أتفاجأ إذا كان لديه شيء مشابه لـ Pytest. إذا لم يكن الأمر كذلك ، يمكنك التبديل بسهولة إلى Pytest. لا تحتاج إلى تعديل الكود الخاص بك. ما عليك سوى تثبيته وتغيير أمر اختبار عداءك.

أيضا ، أنا استخدم Pycharm Pro. في الصفحة التي تعرض رمز الاختبار الخاص بي ، يوجد أيقونة صغيرة بجوار DEF لكل اختبار. يمكنني النقر فوق هذا الرمز وتشغيل هذا الاختبار بشكل فردي.

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