有条件地继续Python单元测试

时间:2011-12-21 13:51:03

标签: python unit-testing

我有一个测试装备,有数组测试用于数独求解器:

  1. 单独测试大多数功能
  2. 测试最后几个使用步骤1中的函数
  3. 使用95个更难的谜题测试最后几个功能
  4. 由于步骤3需要一段时间,我正在寻找一种方法,只有在前面的所有步骤都通过后才能进入下一步。是否可以使用单元测试框架来完成此操作,还是更容易编写自己的控件结构?

2 个答案:

答案 0 :(得分:5)

使用doctest

如果您想使用 doctest ,请将其视为Python IDLE(有关如何准备测试的提示,请参阅doctest documentation),指定结果先前对某些变量的测试然后使用条件检查来确定是否要执行其他测试。就像那样。

不幸的是,它与unittest无关。

使用unittest

unittest

的命令行选项

说到unittest,您仍然可以使用-f (--failfast) 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

有用吗?

答案 1 :(得分: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)