什么时候使用基于 属性 的测试?

when to use Property-Based Testing?

我正在尝试学习属性-Based Testing(PBT)我想我知道如何实施它但是我应该什么时候应用PBT?

例如,在这种情况下,我试图比较函数 getCurrentName() returns 是否为预期的名称。我应该随机化这个测试吗?

@Test
public void getNameTest() {
    assertEquals(nameProxy, proxyFoto.getCurrentName());
}

您的问题太笼统了,无法给出具体的答案。我建议你看看一些关于如何提出好的属性的文章,例如https://johanneslink.net/how-to-specify-it/

至于您的具体示例,为 current name 编写 属性 是否有意义的答案取决于以下几点:

  • 名称如何进入代理对象?是否有合理的机会根据名称的 shape/length/encoding 等行为不同?
  • 这个名字有什么用?是否应该以任何特定方式对其进行规范化、格式化、缩短或处理?

属性和 PBT 是关于发现和伪造关于被测代码行为的假设。如果没有任何可能出错的地方,任何形式的自动化测试都可以被认为是不必要的。如果有相当多的边缘情况和路径可能显示意外行为,那么 PBT 看起来是一个值得的方法。

作为一个务实的建议:开始将您的一些示例测试转化为属性,看看哪些正在发挥作用。然后尝试添加其他属性,例如使用我链接到的文章中的想法。