Python是否提供对假设的支持作为前提条件?

时间:2018-12-06 16:03:53

标签: python python-3.x unit-testing hoare-logic

Python单元测试中的假设

Python是否支持将假设用作测试的先决条件,类似于JUnit with assumeThat(...) methods为Java提供的测试。

这很重要,因为应用了Hoare Logic,所以要引用JUnit:

  

用于说明测试有意义的条件的假设的一组方法。失败的假设并不意味着代码已损坏,但是测试没有提供有用的信息。假设基本上是指“如果这些条件不适用,请勿运行此测试”。默认的JUnit运行器将跳过带有失败假设的测试。自定义跑步者的行为可能会有所不同

Python似乎并没有在unittest framework中提供这些功能。我尝试通过扩展unittest.TestCase POC我自己的方法。

class LoggingTestCase(unittest.TestCase):
    def assumeTrue(self, expr: Any, msg: Any = ...) -> None:
        try:
            super().assertTrue(expr, msg)
            self.test_result = TestResult.PASSED
        except AssertionError as e:
            self.test_result = TestResult.SKIPPED
            raise InvalidAssumption(e)

通过这种行为测试:

class TestLoggingTestCase(LoggingTestCase):
    def test_assumeTrue(self):
        self.assertRaises(InvalidAssumption, self.assumeTrue, False)  # Passes as expected.
        self.assertRaises(InvalidAssumption, self.assumeTrue, True)  # Fails as expected.

这种方法似乎表现出我想要的正确行为,这是最好的方法,是否有更好的方法可以使用,还是可以使用第三方库?我正在寻找一种比将所有基本断言包装起来以做出自己的假设更好的方法。

1 个答案:

答案 0 :(得分:2)

我为此使用pytest skipif。

http://doc.pytest.org/en/latest/skipping.html