1

尽管指定maxfail=1,假设似乎继续生成示例并运行它们并且在很晚之后失败。

有解决方法吗?

这是一个小例子:

from hypothesis.stateful import invariant, rule, RuleBasedStateMachine


class MaxFail(RuleBasedStateMachine):
    count = 0

    @rule()
    def process(self):
        self.count += 1

    @invariant()
    def all_done(self):
        print('-- in invariant %d' % self.count)
        if self.count > 1:
            assert False


MaxFailTest = MaxFail.TestCase
4

1 回答 1

2

这是因为从 Pytest 的角度来看,整个有状态测试只是一个测试- 它调用MaxFailTest.runTest(),如果失败,它将不会运行任何其他测试函数。

另一方面,Hypothesis 不知道除了插件中添加的任何 Pytest 参数或设置。它同样可以与 pytest、unittest 或任何其他测试运行程序一起使用,因为它只是包装了您编写的内部测试函数。

简而言之:Hypothesis 不知道这个--maxfail论点,并且 Pytest 不知道测试会失败,直到 Hypothesis 用它找到的最小示例引发错误。

于 2020-04-23T01:12:15.450 回答