我刚刚将quickcheck
的pytest测试套件迁移到hypothesis
。这非常有效(并且立即发现了一些隐藏的边缘案例错误),但我看到的一个主要区别与两个物业经理之间的测试隔离有关。
quickcheck
似乎只是使用不同的参数值多次运行测试函数,每次都运行我的函数范围的灯具。这也导致pytest的输出中有更多的点。
hypothesis
似乎只运行测试函数的主体多次,这意味着例如在各个运行之间没有事务回滚。这意味着当我的测试将一些东西插入到数据库中时,我无法可靠地断言多个数据库条目,因为上一次运行的所有条目仍然会被挂起。
我是否遗漏了一些明显的东西,或者这是预期的行为?如果是这样,有没有办法让假设作为一个变量在测试中使用?
答案 0 :(得分:2)
我担心你有点卡住了,目前还没有解决这个问题的好办法。
假设需要工作的方式(这是其对pytest-quickcheck的许多改进的来源)不符合pytest关于测试执行的假设。问题是mostly on the pytest side - 目前的pytest夹具系统有一些非常出色的假设,关于你如何运行一个不能很好地控制测试执行的测试,上次我试图解决这个问题我在放弃之前最终沉沦了大约一周的工作,基本上说要么在pytest方面需要改变,要么someone needs to fund this work如果它会变得更好。