Как использовать unittest.TestSuite в VS Code? - PullRequest
0 голосов
/ 20 ноября 2018

В будущем мне нужно будет добавить много одинаковых тестов с разными параметрами.Сейчас я делаю примерный набор тестов:

import unittest

class TestCase(unittest.TestCase):
    def __init__(self, methodName='runTest', param=None):
        super(TestCase, self).__init__(methodName)
        self.param = param

    def test_something(self):
        print '\n>>>>>> test_something: param =', self.param
        self.assertEqual(1, 1)

if __name__ == "__main__":
    suite = unittest.TestSuite()
    testloader = unittest.TestLoader()
    testnames = testloader.getTestCaseNames(TestCase)
    for name in testnames:
        suite.addTest(TestCase(name, param=42))
    unittest.TextTestRunner(verbosity=2).run(suite)

Он обнаруживается VS Code:

start
test.test_navigator.TestCase.test_something

Когда я запускаю тесты, я не получаю параметр:

test_something (test.test_navigator.TestCase) ... 
>>>>>> test_something: param = None
ok

----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

Если я запускаю этот файл напрямую, все работает как положено (примечание param = 42 часть)

test_something (__main__.TestCase) ...
>>>>>> test_something: param = 42
ok

----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

Так что, похоже, VS Code выполняет тесты самостоятельно, просто используяобнаруженные классы и полное игнорирование TestSuite?

Что я делаю не так?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Ключ заключается в реализации функции load_tests:

def load_tests(loader, tests, pattern):
    suite = unittest.TestSuite()
    testnames = loader.getTestCaseNames(TestCase)
    for name in testnames:
        suite.addTest(TestCase(name, param=42))
        suite.addTest(TestCase(name, param=84))
    return suite

В документации сказано:

Если существует load_tests, то обнаружение не возвращается в пакет, load_testsотвечает за загрузку всех тестов в пакете.

Теперь мои тесты выполняются, как и ожидалось.

PS Спасибо Бретту Кэннону за то, что он указал мне на документацию по модульному тестированию

0 голосов
/ 21 ноября 2018

Проблема в том, что ваш код находится в блоке if __name__ == "__main__", который выполняется только тогда, когда вы указываете Python непосредственно на файл.Поэтому, когда расширение просит unittest получить все тесты, а затем запустить их для нас, оно не запускает код в вашем блоке if __name__ == "__main__" (поэтому оно может найти его, но не делает ничего волшебного).

Если вы можете заставить его работать, используя интерфейс командной строки unittest, тогда расширение должно запускать его так, как вы хотите.

...