将AfterScenario与TickSpec一起使用

时间:2013-02-05 03:13:48

标签: f# gherkin

我有一个像这样的功能文件:

Feature: Viewing revenue

Background:
Given invoices
| Date     | Amount |
| 1/1/2010 | 200    |
| 1/1/2011 | 300    |

Scenario: Total revenue
Then the total revenue is
| Label | Revenue |
|       | $500    |

Scenario: Total revenue by year
When I choose to view it by "Year"
Then the total revenue is
| Label | Revenue |
| 2010  | $200    |
| 2011  | $300    |

我想在执行每个场景后运行一些清理代码。我有一个用AfterScenario属性修饰的函数,如下所示:

let [<AfterScenario>] ``Drop Invoices`` () =
  Invoices.removeAll

该函数确实被调用,但只有一次,并且只有当我通过NUnit的gui runner重新加载项目时才会调用。在不重新加载项目的情况下,后续运行测试不会调用该函数。

1 个答案:

答案 0 :(得分:3)

Invoices.removeAll的调用似乎缺少参数,您可能需要添加()

TickSpec期望归因方法返回单位,因此您可能需要将结果通过管道进行忽略。您可以通过将Drop Invoices功能悬停在其上来检查let [<AfterScenario>] ``Drop Invoices`` () = Invoices.removeAll () |> ignore 功能的类型,它应该说单位 - &gt;单位,如果没有尝试这个:

{{1}}

在2012年11月发布的TickSpec之前有issue,如果在场景中执行步骤时抛出异常,则不会调用AfterStep和AfterScenario函数。这已在最新的源代码中修复,并且可通过CodePlexNuget提供程序集。

如果您有多个标记为AfterScenario的函数,并且其中任何一个函数引发异常,则不会调用后续的AfterScenario方法。理想情况下,您的BeforeSceanrio和AfterScenario函数不应抛出。