小黄瓜功能无法与步骤匹配任何方法

问题描述 投票:1回答:2

我是BDD测试

Feature: Register
    I want to register for Authenticator
    Using my name and email 

Scenario: Register for Authenticator
    Given I enter "Joe" "I" and "Doe" name, "[email protected]", "Password123$$$" and true to Terms of Use
    When I press register button
    Then I redirected to confirmation page

我在xunit中进行了单元测试:

[Given(@"I enter ""(\w+)"" ""(\w+)"" and ""(\w+)"" name, ""(\w+)"", ""(\w+)"" and (.*) to Terms of Use")]
        public void I_enter_registration_information(string first, string middle, string last, string email, string password, bool agree)
        {
        }

当我运行我的测试时,我收到此错误:

System.InvalidOperationException:无法使用步骤Given I enter "Joe" "I" and "Doe" name, "[email protected]", "Password123$$$" and true to Terms of Use匹配任何方法。情景Register for Authenticator

我从这个documentation尝试了不同的正则表达式组合

我正在使用这个库:Xunit.Gherkin.Quick

我做错了什么?

c# asp.net-core bdd xunit gherkin
2个回答
1
投票

从我的POV,你的代码和纯文本都很好。

但是,它看起来好像可能已将您的一个参数转换为列表,而不是解析完整的字符串。我怀疑这与逗号有关。 (快速检查是否在没有逗号的情况下工作。)

尝试使用非贪婪的捕获:

""(\w+?)""

我找不到任何文件表明Gherkin应该以这种方式解析逗号,所以它可能是库中的错误。


2
投票

免责声明:我是Xunit.Gherkin.Quick的作者。

你的正则表达式与输入不匹配。

输入:I enter "Joe" "I" and "Doe" name, "[email protected]", "Password123$$$" and true to Terms of Use

正则表达式:I enter "(\w+)" "(\w+)" and "(\w+)" name, "(\w+)", "(\w+)" and (.*) to Terms of Use(我用单引号替换了双引号,因为你在正则表达式前面的转义字符串运算符@有双引号)。

它无法匹配电子邮件地址[email protected]与正则表达式(\w+)。匹配Password123$$$与正则表达式(\w+)相同的问题。您需要使用与整个输入匹配的正确正则表达式。

例如,你可以修复你的正则表达式匹配:I enter "(\w+)" "(\w+)" and "(\w+)" name, "(.+)", "(.+)" and (.*) to Terms of Use。现在,如果要将它放入属性中,则用双引号替换单引号,就是这样:

    [Given(@"I enter ""(\w+)"" ""(\w+)"" and ""(\w+)"" name, ""(.+)"", ""(.+)"" and (.*) to Terms of Use")]
    public void I_enter_registration_information(string first, string middle, string last, string email, string password, bool agree)
    {
    }

我经过测试,在此修复后工作正常。唯一的技巧是遵循正则表达式规则。

© www.soinside.com 2019 - 2024. All rights reserved.