Python - Как замаскировать класс от выполнения в unittest во время выполнения

Пожалуйста, смотрите код ниже. Я пытался реализовать набор тестов для моего проекта

import unittest
class TestClass1(unittest.TestCase):
    def test_1_first(self):
        print("First test case")

    def test_2_second(self):
        print("Second test case")

class TestClass2(unittest.TestCase):
    def test_3_third(self):
        print("Third test case")

    def test_4_fourth(self):
        print("Fourth test case")

if __name__ == "__main__":
    # val = 1        <-- getting from user
    # if val == 1:
    #    Execute test cases in TestClass2
    # else
    #    Execute test cases in TestClass1\
    unittest.main()

Я получу имя класса в качестве аргумента командной строки, и мне нужно запустить каждый класс теста в соответствии с аргументом. Значит, мне нужно выбрать и запустить некоторые классы тестовых случаев во время выполнения. Так может ли кто-нибудь помочь мне предотвратить класс от выполнения модульного теста во время выполнения? Проблема в том, что нельзя использовать метод, такой как передача имени класса во время выполнения.

2 ответа

Решение

Это уже встроено. Вы можете запустить определенный класс с помощью команды:

python -m unittest test_module.TestClass1

Если вам действительно нужно сделать это в вашем scpript, вы можете передать свои уроки unittest.TestLoader().loadTestsFromName а затем запустить тестовый набор с unittest.TextTestRunner().run(suite), Это будет выглядеть примерно так:

test_suite = unittest.TestLoader().loadTestsFromName('__main__.TestClass1')
unittest.TextTestRunner().run(test_suite)

unittest.main() уже разбирает sys.argv разрешить запуск определенных классов или отдельных тестов.

Например, если ваш скрипт называется test.py, вы можете запустить следующее, чтобы запустить только TestClass1:

python test.py __main__.TestClass1

Или следующее, чтобы просто запустить TestClass1.test_1_first:

python test.py __main__.TestClass1.test_1_first

Если вы хотите сделать это в своем скрипте, вы можете передать имя теста, который вы хотите запустить, как defaultTest аргумент:

unittest.main(defaultTest='__main__.TestClass1')
Другие вопросы по тегам