C# 当条件满足时,如何为多部分实现SpecFlow钩子?
我正在为我们的企业开发自动支付处理服务。我们正在尝试实现规范流,我们已经成功地为1当条件C# 当条件满足时,如何为多部分实现SpecFlow钩子?,c#,bdd,specflow,C#,Bdd,Specflow,我正在为我们的企业开发自动支付处理服务。我们正在尝试实现规范流,我们已经成功地为1当条件 Scenario Outline: Stub matches NEXT oldest outstanding bill Given I have a group with the following bills: | Id | Due Date | Status | Amount Due | | Bill A | 9/14/20
Scenario Outline: Stub matches NEXT oldest outstanding bill
Given I have a group with the following bills:
| Id | Due Date | Status | Amount Due |
| Bill A | 9/14/2011 | <Oldest Bill Status> | 1100.00 |
| Bill B | 10/14/2011 | Unpaid | 1200.00 |
| Bill C | 11/14/2011 | Unpaid | 1300.00 |
When a stub is received that matches 'Bill B'
And the Payment Amount is <Payment Amount>
Then the allocation result should <Allocation Result>
And Review should <Review>
Examples:
| Oldest Bill Status | Allocation Result | Review | Payment Amount |
| Reconciled | Allocate to Bill | not required | 1200.00 |
[When(@"a stub is received that matches '(.*)'")]
public void WhenAStubIsReceivedThatMatches(string billKeyName)
{
// Method
}
场景大纲:存根匹配下一个最旧的未付票据
鉴于我有一个小组,有以下账单:
|Id |到期日|状态|到期金额|
|法案A | 9/14/2011 | | 1100.00|
|账单B | 2011年10月14日|未付| 1200.00|
|账单C | 2011年11月14日|未付| 1300.00|
收到与“账单B”匹配的存根时
付款金额为
那么分配结果应该是
而检讨应
示例:
|最早票据状态|分配结果|审核|支付金额|
|已对账|分配到账单|不需要| 1200.00|
[当(@“接收到与“(.*)”匹配的存根时]]
当TubIsReceivedThatMatches(字符串billKeyName)时公共无效
{
//方法
}
在执行结果步骤之前,我不知道如何更改钩子来处理这两个条件。有多个When子句被分解。。。我想你可以理解(并解释)为什么,因为你问了这个问题。把几个动作放在一起是相当困难的,因为它们相互依赖 试着用一个简单的When子句来编写规范,而不是编写不同的场景来描述不同的交互方式 因此,对于您的场景,如果您愿意的话,尝试找出从给定状态到然后状态发生的重要状态转换是什么 这是一个我发现对编写场景有用的小诀窍
- 首先写一个简短的标题
- 然后开始填写步骤。你最终会得到什么?需要什么资产
- 然后写下When步骤。我怎么去那个州
- 然后写下给定的步骤。在执行When子句之前需要什么上下文
- 现在修改标题,看看您是否提出了需要考虑的其他场景李>
几周前,我参加了Gjoko Adzic的一个课程,学到了很多这样的技巧 当子句被分解时,有多个When子句。。。我想你可以理解(并解释)为什么,因为你问了这个问题。把几个动作放在一起是相当困难的,因为它们相互依赖 试着用一个简单的When子句来编写规范,而不是编写不同的场景来描述不同的交互方式 因此,对于您的场景,如果您愿意的话,尝试找出从给定状态到然后状态发生的重要状态转换是什么 这是一个我发现对编写场景有用的小诀窍
- 首先写一个简短的标题
- 然后开始填写步骤。你最终会得到什么?需要什么资产
- 然后写下When步骤。我怎么去那个州
- 然后写下给定的步骤。在执行When子句之前需要什么上下文
- 现在修改标题,看看您是否提出了需要考虑的其他场景李>
几周前,我参加了Gjoko Adzic的一个课程,学到了很多这样的技巧 最好的做法是有一个When语句 一些选择包括:
When a stub is received that matches 'Bill B' for <Payment Amount>
或
给定…等。。。
我收到了一个存根,它与
当我收到存根时
。。。因为存根本身不是被测试的对象,它是背景数据,可以合理地创建为givens的一部分。最佳实践是在语句中使用一个When 一些选择包括:
When a stub is received that matches 'Bill B' for <Payment Amount>
或
给定…等。。。
我收到了一个存根,它与
当我收到存根时
。。。因为存根本身不是被测试的对象,它是背景数据,可以合理地创建为givens的一部分。我想你可以理解(并解释)为什么-实际上,除了可能无法编写代码之外,我不确定为什么。这似乎是我们的业务规则所要求的矩阵对矩阵比较的有效解决方案。重写给定的when将其限制为单个when会降低我们重用代码的能力和功能文件的可读性。我可以用when子句的多部分reg-ex来实现这一点,但Cumber博客认为这是一种反模式。@Chad我所指的是代码的复杂性。矩阵到矩阵的规则听起来很复杂-小黄瓜表能帮你吗?检查场景大纲例如()付款金额实际上在示例表中(以及结果和审核状态。业务规则很复杂,这是定义它们的最简单方法。我的想法是,我可以使用When钩子设置请求,然后在When之后执行请求,然后在不需要支付金额的测试中重用When设置。这不可能吗?我用如果这有帮助的话,再多了解一下场景的背景。哦,天哪,这看起来很复杂。但正如我所见,账单A和C似乎没有发挥作用。难道你们不能只写一个场景,将“账单B”与“当收到“账单B”的存根并收到付款金额”这样的When语句匹配吗?我想你能理解(并解释)为什么-事实上,除了可能无法编码之外,我不确定为什么。这似乎是一个有效的解决方案,可以根据我们的业务规则进行矩阵间比较。重写给定的时间,然后将其限制为单个时间,这会降低我们重用代码的能力和功能文件的可读性。我可以使用
Given ...etc...
And I have a stub is received that matches 'Bill B' for <Payment Amount>
When I receive the stub