有条件地继续进行Python单元测试

2024-05-01 22:03:48 发布

您现在位置:Python中文网/ 问答频道 /正文

有三套数独的测试台,我有一个测试集:

  1. 单独测试大多数功能
  2. 测试最后几个函数,它们使用步骤1中的函数
  3. 用95个更难的谜题测试最后几个函数

由于第3步需要一段时间,我正在寻找一种方法,只有在前面所有步骤都通过的情况下才能进入下一步。使用单元测试框架可以做到这一点吗,还是更容易编写自己的控制结构?在


Tags: 方法函数功能框架情况步骤单元测试谜题
2条回答

如果您的测试是在unittest测试套件中构建的,则只有在第一个测试套件使用以下代码顺利通过时,才能执行长时间运行的测试套件:

suite1 = unittest.TestSuite()
suite2 = unittest.TestSuite()
# fill suites with test cases ...
result1 = unittest.TextTestRunner().run(suite1)
if result1.wasSuccessful():
    unittest.TextTestRunner().run(suite2)

使用doctest

如果您希望使用doctest,那么将其视为Python空闲(有关如何准备测试的提示,请参见^{} documentation),将以前测试的结果分配给一些变量,然后使用条件检查来确定是否要执行其他测试。就这样。在

不幸的是它与^{}无关。在

使用unittest

unittest的命令行选项

当遇到unittest时,您仍然可以使用^{} (^{}) option从命令行调用它,因此它在第一个错误或失败时停止测试运行。在

跳过测试

unittest支持根据某些条件跳过测试(see documentation),或者当您知道测试已损坏并且不想将其视为失败时。请参阅基本跳过示例:

class MyTestCase(unittest.TestCase):

    @unittest.skip("demonstrating skipping")
    def test_nothing(self):
        self.fail("shouldn't happen")

    @unittest.skipIf(mylib.__version__ < (1, 3),
                     "not supported in this library version")
    def test_format(self):
        # Tests that work for only a certain version of the library.
        pass

    @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
    def test_windows_support(self):
        # windows specific testing code
        pass

有帮助吗?在

相关问题 更多 >