什么时候使用基于 属性 的测试?
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 看起来是一个值得的方法。
作为一个务实的建议:开始将您的一些示例测试转化为属性,看看哪些正在发挥作用。然后尝试添加其他属性,例如使用我链接到的文章中的想法。
我正在尝试学习属性-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 看起来是一个值得的方法。
作为一个务实的建议:开始将您的一些示例测试转化为属性,看看哪些正在发挥作用。然后尝试添加其他属性,例如使用我链接到的文章中的想法。