我是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
我做错了什么?
答案 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应该以这种方式解析逗号,因此该库可能是一个错误。