Cucumber 如何使用小黄瓜测试基于授权的过滤器?

Cucumber 如何使用小黄瓜测试基于授权的过滤器?,cucumber,bdd,gherkin,Cucumber,Bdd,Gherkin,我不明白当没有实际的业务操作来测试某些东西时,场景应该是什么样子 下面的场景足够好吗?我不明白如何将它转换成过去、行动、未来的序列 Scenario: Given The system contains the following users | email | role | | admin@example.com | ADMIN | | user@example.com | USER | And Th

我不明白当没有实际的业务操作来测试某些东西时,场景应该是什么样子

下面的场景足够好吗?我不明白如何将它转换成过去、行动、未来的序列

Scenario:
    Given The system contains the following users
        | email             | role  |
        | admin@example.com | ADMIN |
        | user@example.com  | USER  |
    And The system contains the following Products
        | Name     | Active |
        | Product1 | true   |
        | Product2 | false  |

    Then The list of Products for 'admin@example.com' user should contain the following entries
        | Name     | Active |
        | Product1 | true   |
        | Product2 | false  |
    And The list of Products for 'user@example.com' user should contain the following entries
        | Name     | Active |
        | Product1 | true   |

就我个人而言,我会这样写这个场景:

Scenario Outline: Viewing inactive products in different roles
    Given I am logged in as <user_role>
     And the system contains the active product "product1"
     And the system contains the inactive product "product2"
    When I view the available products
    Then I should see the "product1" product
     And I <should_see_inactive?> see the "product2" product

 Examples:
   | user_role  | should_see_inactive? |
   | an admin   | should               |
   | a user     | should not           |
场景大纲:以不同角色查看非活动产品
鉴于我是以
并且系统包含活动产品“product1”
系统包含非活动产品“product2”
当我查看可用的产品时
然后我应该看到“product1”产品
我看到了“产品2”产品
示例:
|用户角色|是否应看到|处于非活动状态|
|管理员应该|
|用户不应|
您在这里似乎要测试的是,角色中的特定用户是否具有查看非活动产品的正确访问级别

您的陈述是以一种似乎应该编写两个场景的方式编写的,当您为两个不同的用户组测试相同的内容以显示差异时,我正在使用
场景大纲

tl;博士 如果figgin很难沟通。在需求中嵌入行为(即“何时”条款)更好(IMO)

你的建议需要解释 你发布的建议实际上没有告诉我要求是什么!相反,我现在必须弄清楚,为了得到你想要的东西,潜在的意图必须是什么。换句话说,我必须“逆向工程”预期的逻辑。这是传达需求的一种更糟糕的方式。事实上,这是一种更糟糕的沟通方式

以下是对您发布的建议的一种解释

Given a user who is not an admin
And products which are not active
When that user ever views any products
Then he cannot view the inactive products

Given a user who is an admin
And products which are not active
And products which are active
When that user ever views any products
Then he can view the both sets of products
但是,在您发布的建议中,是否应允许非管理员查看非活动产品?这是一个合理的问题

如果你说的唯一一件事是某些产品是“为”某某,那么我不知道你指的是“所有权”还是“可查看性”。如果我编写的代码允许所有用户查看其他人的产品,那会怎么样?如果单击管理员用户配置文件,则会看到所有产品。如果单击非管理员用户配置文件,则只能看到活动产品。看见我已根据您的要求为每个用户成功策划了列表。但如果你的意图是基于安全性的呢!不知何故,一个非管理员甚至不应该在UI中看到这些产品。这是一个非常不同的要求,但您的书写没有区分它。这里有另一个很好的解释:如果你想让我过滤的唯一东西是某种“可选择性”呢?ie:我可以查看所有产品,但我不能选择/附加/使用非活动产品(除非我是管理员)。同样,这是对策展和知名度的不同解释

你可能会说“背景”让这一点变得显而易见。鉴于应用程序的页面流,没有人会误解其意图。然而,当你看到足够多的程序经历了重大的更改后,你将不会依赖“上下文”来使事情变得“明显”。或者有人只是将你的小黄瓜文件分成两部分。如果需要周围的需求来正确解释这一点,那么现在我们仅仅通过改进代码中的文件结构就失去了这一点

简言之,如果费金努力沟通。我相信将行为嵌入到需求中会减少人们误解它的可能性

为什么我更喜欢我的建议(有“何时”条款) 相反,这个答案中的建议是字面意义上的。无论以后添加或更改了哪些其他权限层,或者DB模式如何更改,我们都知道需求是什么

我认为行为驱动的需求也能帮助你更好地与产品负责人沟通。我打赌产品负责人会说“我不希望任何人(除了管理员)能够看到非活动的产品。”我的建议几乎与产品负责人在这种情况下所说的一字不差。您的建议必须将真正的意图“转换”为程序员喜欢考虑的“数据驱动”视图。然而,我们越多地将他们的评论“翻译”成不同的格式(如数据结构图),我们就越有可能产生假设和误解。这样的翻译是“有损的”。在我们的职业生涯中,我们听到产品负责人说“什么?那不是我说的!”的次数越多,我们就越会对要求的“隐性”沟通或“明显”翻译感到不舒服。相反,显式地声明每个文本需求

根据我的经验,产品所有者总是首先考虑更多的行为/客户驱动的术语。不过这只是我的经验

关于小黄瓜 小黄瓜只是一个工具,所以它做了一件事,一件事做得很好:它迫使你在行为驱动开发(BDD)中思考。如果你使用小黄瓜,你必须根据“输入”行为和它所要求的结果来写东西。否则你用错了工具

相反,您应该决定是否认为BDD是一种迫使自己遵循的好哲学。如果您认为遵循这种理念是好的,那么您需要不断地重新表述需求,直到出现“何时”声明。一些人(包括我)认为强迫自己做出“何时”陈述的练习是好的

此外,小黄瓜与其他文档并不相互排斥。例如,您仍然有ERD图、UI模型等。事实上,您甚至可以从其他设计文档中引用小黄瓜场景。小黄瓜是为了帮助你知道你是否按照客户的要求去做,而不是你是否设计好了代码。其他规范可以做到这一点,它们可以协同工作

不仅如此,“需求”本身也有层次,用不同的媒介来表示。例如,您可能需要产品所有者为客户编写的“签准”文档。该文件的格式为d