Python假设-一次多次测试构建策略?

Python假设-一次多次测试构建策略?,python,testing,python-hypothesis,property-testing,Python,Testing,Python Hypothesis,Property Testing,我有一个复合的,昂贵的建设,但廉价的测试策略。我必须做: @given(expensive_strategy()) def test_all(x): assert... assert... ... 构建示例大约需要4秒钟,运行断言的时间可以忽略不计 最佳实践要求将这些测试分开 我不清楚如何将假设策略与TestCase.setUp或pytest会话范围的装置结合起来。装饰装置和使用x=priced_strategy()调用@给定(x)没有帮助。一个选项是仅在生成示例时使用

我有一个复合的,昂贵的建设,但廉价的测试策略。我必须做:

@given(expensive_strategy())
def test_all(x):
    assert...
    assert...
    ...
构建示例大约需要4秒钟,运行断言的时间可以忽略不计

最佳实践要求将这些测试分开


我不清楚如何将假设策略与TestCase.setUp或pytest会话范围的装置结合起来。装饰装置和使用
x=priced_strategy()调用@给定(x)
没有帮助。

一个选项是仅在生成示例时使用该策略,而忽略测试用例收缩、示例数据库等。这将使通过的测试套件更快,而失败的测试套件更容易混淆。类似于以下的方法应该可以工作:

class MyTest(TestCase):
    @classmethod  # or however this is done in your test runner
    def setUpClass(cls):
        strategy = expensive_strategy()
        cls.examples = [strategy.example() for _ in range(1000)]

    def test_all(self):
        for x in self.examples:
            assert invariant(x)
另一种选择是破坏假设的内部结构,这样每个测试用例都会收到相同的ByTestStream,并对构建策略时速度较慢的内容进行缓存,尽管这肯定会违反“最佳实践”


就我个人而言,当“最佳实践”导致荒谬的结果(如缓慢的测试套件)时,我不会遵循这些“最佳实践”,而是在一个测试方法中进行所有断言,可能是通过调用辅助方法,如
assert\u a\u special\u kind\u of\u assertion(x)

怎么样?假设的作者指出,第一个选项不是一个好的策略,因为
.example()
不能代表
假设
在普通测试运行中会做什么。