PyDev не захватывает выходные данные unittest.TextTestRunner? - PullRequest
1 голос
/ 23 августа 2011

Перспектива PyDev PyUnit правильно отображает выходные данные моих модульных тестов, когда я запускаю их как «модульный тест Python» из модуля, в котором они живут, с этим базовым шаблоном использования:

import unittest

class MyTest(unittest.TestCase):
    def test_something(self):
        pass

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

Однако, когда я импортирую тесты из другого модуля, вот так ...

import unittest
import mypackage.mytests

if __name__ == '__main__':
    unittest.main(module=mypackage.mytests)

... тесты не проводятся. Когда я запускаю тот же модуль, что и «Python Run» или из терминала, он ведет себя правильно, поэтому по какой-то причине перспектива PyUnit не загружает тесты правильно. Я получаю те же результаты с этим альтернативным методом:

import unittest
import mypackage.mytests

tests = unittest.TestLoader().loadTestsFromModule(mypackage.mytests)
unittest.TextTestRunner().run(tests)

Есть ли другой способ импортировать модуль, содержащий производные классы TestCase, и заставить PyDev захватить выходные данные тестера?

1 Ответ

1 голос
/ 24 августа 2011

PyDev не будет запускать ваш __main__, он будет собирать сами классы, поэтому вам нужно загрузить свои классы в модуль, чтобы он мог их найти (и выполнить запуск от имени> Python Unittest, или даже использоватькомбинация клавиш Ctrl + F9 напрямую - в этом случае она не будет отображать классы, но нажатие Enter сразу после сочетания клавиш Ctrl + F9 должно работать для запуска всех тестов в модуле в последнем PyDev).

, например:

import unittest 
from mypackage.mytests import *

Если бы у вас было несколько классов и классы TestCase имели одно и то же имя, вам нужно было бы сделать что-то вроде:

import unittest
from mypackage.mytests import Test as Test1
from mypackage.mytests2 import Test as Test2
...

В этом случае вам, вероятно, будет лучшепутем создания простого помощника для загрузки всех классов из модуля и помещения подклассов TestCase в текущий модуль с разными именами (это должно быть просто сделать через dir / getattr в модуле).

Тем не менее обратите вниманиечто в PyDev вы можете выбрать несколько файлов / папок и выполнить команду от имени> Python unittest, и он запустит все тесты, которые он найдет в модуле (или рекурсивно в каталоге), так что это может быть ужедостаточно для вас в зависимости от вашего варианта использования.

...