我们希望在持续集成中使用 FsCheck 作为我们单元测试的一部分。因此,确定性和可重复的行为对我们来说非常重要。
FsCheck 是一个随机测试框架,可以生成有时可能会中断的测试用例。关键是,我们不仅使用必须为每个输入保留的属性,例如 say List.rev >> List.rev === id
。而是,我们做一些数字,一些测试用例可能会因为条件不好而导致测试中断。
问题是:我们如何保证,一旦测试成功,它就永远成功?
到目前为止,我看到以下选项:
- 对种子进行硬编码,例如 0。这将是最简单的解决方案。
- 制作非常具体的自定义生成器,以避免不良示例。当然可能,但结果可能非常困难,尤其是在要生成许多对象的情况下。
- 忍受它,在某些情况下,由于病理情况,构建可能是红色的,并且只是重新运行。
在这样的设置中使用 FsCheck 的惯用方式是什么?