我是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
我做错了什么?
从我的POV,你的代码和纯文本都很好。
但是,它看起来好像可能已将您的一个参数转换为列表,而不是解析完整的字符串。我怀疑这与逗号有关。 (快速检查是否在没有逗号的情况下工作。)
尝试使用非贪婪的捕获:
""(\w+?)""
我找不到任何文件表明Gherkin应该以这种方式解析逗号,所以它可能是库中的错误。
免责声明:我是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)
{
}
我经过测试,在此修复后工作正常。唯一的技巧是遵循正则表达式规则。