Используя НЕАКТИВНЫЙ для выполнения модульных тестов Python PyUnit

Существует ли способ, в НЕАКТИВНОМ, выполнить PyUnit (unittest модуль) модульные тесты непосредственно?

Я спрашиваю, потому что у меня есть короткий тестовый модуль и когда я работаю, он с Python mymodule.py от Cygwin окружает, я добираюсь, все тесты передали, но когда я использую Выполнение-> Модуль Выполнения от НЕАКТИВНОГО тестовая передача, но затем я получаю исключение (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()

Когда я выполняю это от оболочки Cygwin с python fooTests.py, это производит:

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

OK

Но когда я редактирую fooTests.py в НЕАКТИВНОМ, и я действительно Работаю-> Модуль Выполнения, новый Python Shell, порожденный НЕАКТИВНЫМИ продуктами:

>>> ================================ 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) в НЕАКТИВНОМ для выполнения модульных тестов быстро?

(Это, конечно, должно быть простым вопросом, но мои быстрые попытки понять это оказались бесплодными.)

10
задан HostileFork 17 May 2010 в 15:29
поделиться

1 ответ

Никто не ответил (я считаю, что если в первые несколько минут ответов нет, вероятность ответа значительно снижается :), поэтому Я продолжал исследовать это сам.

Не уверен, что это самое элегантное решение или нет, но изменение:

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

на

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

, похоже, помогло.

Думаю, проблема в том, что (согласно http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-11/0239.html ) модуль unittest завершается вызывая sys.exit, что, по-видимому, проблематично для IDLE, поскольку он хочет, чтобы оболочка Python работала, тогда как это не проблема, когда вы запускаете ее из командной строки, которая в любом случае ожидает сбросить вас обратно в уже работающую командную строку.

Я не знаю, является ли это решение, перехватывающее событие SystemExit и его игнорирование, проблематичным, но, похоже, оно работает для проверенных мной случаев прохождения всех тестов и некоторых неудачных тестов.

Также: см. Это сообщение StackOverFlow: Какой код я могу использовать, чтобы проверить, работает ли Python в IDLE? , который предоставляет тест, чтобы увидеть, запускается ли программа из IDLE или нет.

8
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: