我有一个像这样的功能文件:
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重新加载项目时才会调用。在不重新加载项目的情况下,后续运行测试不会调用该函数。
答案 0 :(得分:3)
对Invoices.removeAll
的调用似乎缺少参数,您可能需要添加()。
TickSpec期望归因方法返回单位,因此您可能需要将结果通过管道进行忽略。您可以通过将Drop Invoices
功能悬停在其上来检查let [<AfterScenario>] ``Drop Invoices`` () =
Invoices.removeAll () |> ignore
功能的类型,它应该说单位 - &gt;单位,如果没有尝试这个:
{{1}}
在2012年11月发布的TickSpec之前有issue,如果在场景中执行步骤时抛出异常,则不会调用AfterStep和AfterScenario函数。这已在最新的源代码中修复,并且可通过CodePlex或Nuget提供程序集。
如果您有多个标记为AfterScenario的函数,并且其中任何一个函数引发异常,则不会调用后续的AfterScenario方法。理想情况下,您的BeforeSceanrio和AfterScenario函数不应抛出。