我如何才能最好地处理这样一个事实:我的许多步骤应该将0,1或甚至2个日期作为"第一个参数"?例如,我如何最好地支持Specflow中的可选参数
最简单的情况是,只要步骤发生在彼此之后,日期就无关紧要了
Given Peter was born 23-06-1973
And Peter created an account
And Peter deposited $200
Run Code Online (Sandbox Code Playgroud)
通常,很多步骤都与时间有关,例如
Given Peter was born 23-06-1973
And at 1-4-2012 Peter created an account
And at 13-4-2012 Peter deposited $200
Run Code Online (Sandbox Code Playgroud)
在其他时间有两个日期,例如实时日期和发生事件的日期.例如.彼得填写了14-4-2012的印刷表格以进行汇款,但表格丢失了几天,我们今天需要记录表格已于几天前填写.
Given Peter was born 23-06-1973
...
And at 16-4-2012 really at 14-4-2012 Completed a transfer form to transfer $100 to account 12345
Run Code Online (Sandbox Code Playgroud)
我脑子里浮现出两件事:
首先,我现在有一天不用担心大量的步骤定义,只要它们很短(oneliners)并调用某种自动化层或DSL来帮助我自动化被测系统.看到这个出色的演示灵感.
因此,在这种意义上,您可以将每个案例的"重载"加倍步骤定义.
我对第二个解决方案的第一个尝试是将属性堆叠在彼此之上以获得相同的方法.这有效,但不适用于可选参数.(并且可选参数不能与引用类型一起使用,因为DateTime,但DateTime?nullable工作).如果你像这样加紧步骤,你会收到如下错误:
参数计数不匹配!绑定方法'Class1.MyGiven(Int32,Int32,Int32)'应该有1个参数
所以我回到我的第一个解决方案:
[Given(@"case one with one int '(\d+)'")]
public void Case1(int a)
{
// Short but sweet step definition that calls into automation layer
}
[Given(@"case one with two ints '(\d+)' and '(\d+)'")]
public void Case2(int a, int b)
{
// Short but sweet step definition that calls into automation layer
}
[Given(@"case one with three ints '(\d+)' and '(\d+)' and also '(\d+)'")]
public void Case3(int a, int b , int c)
{
// Short but sweet step definition that calls into automation layer
}
Run Code Online (Sandbox Code Playgroud)
我希望我来回走动不会引起太多混乱.对不起 - 公交车上没有IDE就绪:)
我更喜欢多个步骤的简单性,但如果你想按照你的建议去做,你需要制作一个合适的正则表达式。类似的东西(未测试):
[Given(@"(at ([0-9-]+) (really at ([0-9-]+) |)|)(\w+) Completed a transfer form to transfer \$(\d+) to account (\d+)"]
public void TransferStep(string dummy1, DateTime? atDate, string dummy2, DateTime? reallyAtDate, string name, decimal amount, int account)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9324 次 |
| 最近记录: |