Python - 如何屏蔽 class 在运行时在单元测试中执行

Python - How to mask a class from being executed in unittest on runtime

请看下面的代码。我正在尝试为我的项目实施测试套件

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

我将获得 class 名称作为 命令行参数 并且我需要 运行 每个 class 根据参数进行测试.意味着我需要 select 和 运行 一些 class 的测试用例 运行 时间。 那么谁能帮我防止 class 在 运行 时间 执行单元测试?问题是执行时不允许使用传递class名称的方法

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

那已经是 built-in。您可以通过命令 运行 具体 class:

python -m unittest test_module.TestClass1

如果您确实需要在您的脚本中这样做,您可以将您的 classes 传递给 unittest.TestLoader().loadTestsFromName,然后 运行 测试套件与 unittest.TextTestRunner().run(suite)。它看起来像这样:

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