何时使用基于属性的测试?

Posted

技术标签:

【中文标题】何时使用基于属性的测试?【英文标题】:when to use Property-Based Testing? 【发布时间】:2022-01-16 20:12:02 【问题描述】:

我正在尝试学习基于属性的测试(PBT)我想我知道如何实施它,但我应该什么时候应用 PBT?

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

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

【问题讨论】:

nameProxyproxyFoto 是什么? nameProxy 是一个值为 "name" 的字符串,proxyFoto 是一个具有 long id; a String name; Date date; 的对象,getCurrentName 只返回名称 你是在问是否应该测试一个 property getter? You can,但它相当 contentious whether you should - 甚至在我们开始考虑基于示例的测试与属性之前 -基于测试。 【参考方案1】:

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

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

名称如何进入代理对象?根据名称的形状/长度/编码等,行为是否有不同的合理可能性? 这个名字是干什么用的?是否应该以任何特定方式对其进行规范化、格式化、缩短或处理?

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

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

【讨论】:

以上是关于何时使用基于属性的测试?的主要内容,如果未能解决你的问题,请参考以下文章

React 测试库:何时使用 userEvent.click 以及何时使用 fireEvent

如何使用 FsCheck 生成随机数作为基于属性的测试的输入

Agitar 和 Quickcheck 基于属性的测试有啥区别?

Angular 2 测试 - 异步函数调用 - 何时使用

PHP中基于属性的测试?

使用 Hedgehog(或任何其他基于属性的测试框架)生成随机 GADT 的最安全方法