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