Python-如何屏蔽运行时在unittest中执行的类

时间:2018-07-17 08:21:47

标签: python python-unittest django-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 个答案:

答案 0 :(得分:2)

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')

答案 1 :(得分:1)

已经是built-in。您可以通过以下命令运行特定的类:

python -m unittest test_module.TestClass1

如果确实需要在脚本中进行操作,则可以将类传递给unittest.TestLoader().loadTestsFromName,然后使用unittest.TextTestRunner().run(suite)运行测试套件。看起来像这样:

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