tdd - 基于负属性的测试

标签 tdd quickcheck fscheck fuzz-testing property-based-testing

当您可以表达简单且定义明确的属性时,基于属性的测试就很好。

在测试解析器的情况下,我也幸运地遇到了“负面属性”,例如通过为缩进敏感语言生成无效标识符或不匹配的缩进。但是,“负面属性”是一种常见的表达和测试的东西吗?这意味着编写生成专门的伪造输入的生成器。

有哪些与解析器无关的负面属性的真实例子?

最佳答案

我有本质上相同的问题。

我已经更详细地发布了它,连同我迄今为止的所有想法,关于如何实现这一点:

Pattern for generating negative Scalacheck scenarios: Using property based testing to test validation logic in Scala

对于我们来说,“真实世界”的情况是我们有大量的数据绑定(bind)案例类,并且这些案例类具有验证逻辑(我们使用 Wix Accord 进行验证)。为了彻底测试验证逻辑,我们需要创建一个对象,使其属性之一无效,然后查看 validate(o) 是否失败。然后对对象的每个属性重复。

我们还会遇到特定属性需要无效的特定情况。例如,检查我们的系统是否能正确处理无效 ID。这更容易,我们可以只使用 forAll(someGen) 并改变它。实际上,只是 v => val invalidV = v copy(id = "badID") 现在对于每个生成的属性,我都将其突变为具有错误的 ID。当然,您可以变得更花哨,但您明白了。

所有这些都在我的另一篇文章中进行了总结……以及对“最佳模式”的公开征集。希望得到一些好的想法!

关于tdd - 基于负属性的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954834/

相关文章:

ruby-on-rails - 显示每个rspec示例的运行时

unit-testing - 使用 Moq 设置测试的更好方法

haskell - 从 Cabal 向 HSpec 提供选项

haskell - 如何测试这种数据类型的半群定律?

f# - 将基于 System.Random 的生成器转换为 FsCheck 生成器

unit-testing - MS Fakes 的 TDD

cakephp - CakePHP 中的测试驱动开发

haskell - 使用 HSpec 和 QuickCheck 验证 Data.Monoid 属性

.net - 如何让 FsCheck 生成尊重 MaxLengthAttribute 的随机字符串?

testing - 属性抛出 xUnit 和测试资源管理器