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()
不能代表假设
在普通测试运行中会做什么。