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

时间:2018-08-18 17:15:58

标签: c# asp.net-core bdd xunit gherkin

我是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, "joe.doe@ngc.com", "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:无法将任何方法与step匹配   Given I enter "Joe" "I" and "Doe" name, "joe.doe@ngc.com", "Password123$$$" and true to Terms of Use。场景Register for Authenticator

我尝试过与此documentation

不同的正则表达式组合

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

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

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

输入:I enter "Joe" "I" and "Doe" name, "joe.doe@ngc.com", "Password123$$$" and true to Terms of Use

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

它不能将电子邮件地址joe.doe@ngc.com与正则表达式(\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)
    {
    }

我测试过,此修复程序正常运行。唯一的技巧是遵守正则表达式规则。

答案 1 :(得分:1)

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

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

尝试使用非贪婪捕获:

""(\w+?)""

我找不到任何文档建议Gherkin应该以这种方式解析逗号,因此该库可能是一个错误。