Testing 功能测试理念:测试特性还是要求?

Testing 功能测试理念:测试特性还是要求?,testing,functional-testing,Testing,Functional Testing,我目前正在写一些功能测试,我开始想知道这两者之间最好的哲学是什么 处境 我的应用程序有一些安全页面,需要用户的组具有正确的凭据才能访问。这些用户分为两个组:“合作者组”和“责任组”。将为这些组提供凭据 可能的哲学 解决方案1:测试凭证a.k.a.测试功能。 对于每个安全页面,我测试 使用2个用户访问:一个用户使用 正确的凭证,只有这一个, 还有一个没有正确的证件 优点:只测试页面是否受到特定凭证的保护 缺点:不测试客户端想要(和用户)的“最终”应用程序行为 解决方案2:测试组a.k.a.测试需求

我目前正在写一些功能测试,我开始想知道这两者之间最好的哲学是什么

处境 我的应用程序有一些安全页面,需要用户的组具有正确的凭据才能访问。这些用户分为两个组:“合作者组”和“责任组”。将为这些组提供凭据

可能的哲学 解决方案1:测试凭证a.k.a.测试功能。

对于每个安全页面,我测试 使用2个用户访问:一个用户使用 正确的凭证,只有这一个, 还有一个没有正确的证件

优点:只测试页面是否受到特定凭证的保护

缺点:不测试客户端想要(和用户)的“最终”应用程序行为

解决方案2:测试组a.k.a.测试需求

对于每个安全页面,我测试 访问每个组的用户,以及 检查是否只有允许的组 获得对安全页面的访问权限

优点:测试“最终”应用程序行为,如客户端所需(和用户所需)

缺点:

  • 测试与测试夹具绑定
  • 如果业务规则更改或创建了更多组,则测试必须更改

谢谢。

我认为第二个解决方案是好的。将测试与组关联的凭据

优点:测试“最终”应用程序行为,如客户端所需(和用户所需)

这是最重要的部分。功能测试旨在测试每种可能情况下的最终应用程序。如果您想测试您的凭据与用户或组具有相同行为的事实,最好使用单元测试

缺点:如果业务规则发生更改或创建了更多的组,则测试必须更改

如果应用程序的业务发生变化,您的测试用例将始终必须更新。正如您在单元测试中所做的那样。如果修改函数的代码,则检查单元测试是否仍然能够控制每种情况。功能测试也是如此

维护您的测试(以及它们需要运行的装置)是一项非常乏味的任务,但这是确保您的代码强大的唯一方法


希望有帮助。

我会做这两项测试。正如您所指出的,第一个不需要更新,但正在测试一个至关重要的事实,即没有权利的用户无法访问。第二个是更全面的测试,正如@TimotheeMartin指出的,当代码发生变化时,测试总是需要更新

这两种测试似乎都符合逻辑,但第二种解决方案不是更像一种验收测试吗?这是一个术语问题,我想,在我看来,验收测试是由真正的用户使用他们自己的凭据进行的测试,并对应用程序进行全面测试。因此,第二次测试在某种程度上可以被视为验收。但是,只要这些测试是自动化的,并且这些测试只是测试应用程序的授权部分,我就会将它们归类为功能测试。