سؤال

هل هناك طريقة، داخل IDLE، لتشغيل PyUnit (unittest وحدة) وحدة الاختبارات مباشرة؟

وأنا أسأل لأن لدي نموذج اختبار قصيرة، وعندما وتشغيله مع mymodule.py الثعبان من سيغوين قذيفة أحصل على جميع الاختبارات مرت، ولكن عندما استخدم انتخابات الاعادة> تشغيل وحدة من IDLE الاختبارات تمر ولكن بعد ذلك الحصول على استثناء (SystemExit: خطأ).

وعلى سبيل المثال، هنا هو وحدة اختبار عينة إلى إنتاج هذا:

#!/usr/bin/python

import unittest

class fooTests(unittest.TestCase):

    def setUp(self):
        self.foo = "bar"

    def testDummyTest(self):
        self.assertTrue(True)

    def testDummyTestTwo(self):
        self.assertEquals("foo", "foo")


    def tearDown(self):
        self.foo = None

if __name__ == '__main__':
    unittest.main()

عند تشغيل هذه من سيغوين قذيفة مع fooTests.py الثعبان وتنتج:

$ python fooTests.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

ولكن عندما أنا تحرير fooTests.py داخل IDLE، وأنا أفعل تشغيل -> تشغيل وحدة، ولدت بيثون شل الجديد IDLE تنتج:

>>> ================================ RESTART ================================
>>> 
..
----------------------------------------------------------------------
Ran 2 tests in 0.031s

OK

Traceback (most recent call last):
  File "C:\Some\path\info\I\shortened\fooTests.py", line 20, in <module>
    unittest.main()
  File "C:\Python26\lib\unittest.py", line 817, in __init__
    self.runTests()
  File "C:\Python26\lib\unittest.py", line 865, in runTests
    sys.exit(not result.wasSuccessful())
SystemExit: False
>>> 

وماذا أفعل الخطأ، لإنتاج هذه traceback، وخصوصا كيف يمكنني إصلاحه حتى أستطيع أن تفعل انتخابات الاعادة> تشغيل وحدة (أو F5) داخل IDLE لتشغيل وحدة الاختبارات بسرعة؟

(وهذا يجب أن يكون بالتأكيد سؤالا بسيطا، ولكن محاولاتي سريعة لأنها من أصل الرقم أثبتت غير مثمرة.)

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

المحلول 2

لا أحد أجاب (أجد أنه إذا لم تكن هناك أي إجابات في الدقائق الأولى، من احتمال وقوع الجواب تنخفض بشكل كبير :)، لذلك ظللت البحث هذا بنفسي.

ولست متأكدا إذا كان هذا هو الحل الأكثر أناقة أم لا، ولكن تغيير:

if __name__ == '__main__':
    unittest.main()

إلى

if __name__ == '__main__':
    try: unittest.main()
    except SystemExit: pass

ويبدو أن تفعل خدعة.

وأعتقد أن المشكلة تكمن في أن (وفقا ل<لأ href = "http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-11/0239.html" يختلط = "noreferrer نوفولو "> http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-11/0239.html ) وunittest التشطيبات وحدة عن طريق الاتصال sys.exit وهي إشكالية على ما يبدو لIDLE منذ انها تريد الحفاظ على بيثون قذيفة على التوالي، في حين انها ليست مشكلة عند تشغيله من سطر الأوامر، والذي يتوقع أن يلقي لكم مرة أخرى إلى سطر الأوامر التي تعمل بالفعل على أي حال.

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

وأيضا: انظر هذا ستاكوفيرفلوو رد: <لأ href = "https://stackoverflow.com/questions/3431498/what-code-can-i-use-to-check-if-python-is-running-in -idle "> ما هو الرمز التي يمكنني استخدامها للتحقق مما إذا بيثون قيد التشغيل في IDLE؟ ، الذي يوفر اختبار لمعرفة ما إذا كان يتم تشغيل البرنامج من داخل IDLE أم لا.

نصائح أخرى

ويمكنك أيضا القيام

if __name__ == '__main__':
    unittest.main(exit=False)

وإذا كنت تستخدم بيثون> = 2.7

وشيء مثل هذا العمل ينبغي أيضا:

suite = unittest.TestLoader().loadTestsFromTestCase( fooTests )
unittest.TextTestRunner(verbosity=2).run( suite )

ولقد وجدت أن هنا ، وأنها عملت لي.

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