当您可以表达简单且定义明确的属性时,基于属性的测试是很好的。
在测试解析器的情况下,我也很幸运地使用了“负面属性”,例如通过生成无效标识符或缩进敏感语言的不匹配缩进。但是“负面属性”是一种常见的表达和测试的东西吗?这意味着编写生成专门的虚假输入的生成器。
有哪些与解析器无关的负面属性的真实例子?
当您可以表达简单且定义明确的属性时,基于属性的测试是很好的。
在测试解析器的情况下,我也很幸运地使用了“负面属性”,例如通过生成无效标识符或缩进敏感语言的不匹配缩进。但是“负面属性”是一种常见的表达和测试的东西吗?这意味着编写生成专门的虚假输入的生成器。
有哪些与解析器无关的负面属性的真实例子?
我基本上有同样的问题。
我已经更详细地发布了它,以及到目前为止我的所有想法,关于如何实现这一点:
生成负面 Scalacheck 场景的模式:使用基于属性的测试来测试 Scala 中的验证逻辑
对我们来说,“现实世界”的情况是我们有大型的数据绑定案例类,并且这些案例类具有验证逻辑(我们使用 Wix Accord 进行验证)。要彻底测试验证逻辑,我们需要创建一个对象,使其其中一个属性无效,然后查看是否validate(o)
失败。然后对对象上的每个属性重复。
我们还遇到了特定属性需要无效的特定情况。例如,检查我们的系统是否能正确处理无效 ID。这更容易,我们可以只使用 aforAll(someGen)
并对其进行变异。实际上,就在v => val invalidV = v copy(id = "badID")
现在,对于每个生成的属性,我已经将其突变为具有错误的 ID。你当然可以变得更漂亮,但你明白了。
所有这些都在我的另一篇文章中进行了总结......以及“最佳模式”的公开征集。希望能得到一些好的想法!