【发布时间】:2015-06-16 23:06:08
【问题描述】:
SpecFlow 让我很受用,我真的很喜欢它。
除了一些棘手的问题...比如功能和场景设置代码。
在一个名为 InfrastructureSteps.cs 的“通用”文件中,我有应该为每个场景运行的通用设置代码 - 所以我的方法看起来像这样:
[BeforeScenario]
public void SetupDbContext()
{
// define some basic stuff, set up a database transaction context etc.
}
这需要在每个场景之前运行,到目前为止,它运行得很好。
但是现在,我在一个特定于测试的步骤文件中有两个场景,它们也需要相当广泛的设置才能运行。所以我在.feature 中用标签标记了他们的场景:
@needs_extra_setup
Scenario: .....
Given .....
When .....
Then ......
并实现了一个特定于测试的BeforeScenario设置方法:
[BeforeScenario("needs_extra_setup")]
public void DoExtraSetupForMyScenario()
{
// do stuff
}
它工作 - 它被调用 - 但它被调用 在 通用 [BeforeScenario] 方法被调用 :-( 因此它失败 - 在该通用设置方法中设置的东西不存在并导致我的代码失败。
那么 SpecFlow 中有什么方法可以订购 [BeforeScenario] 方法吗?或者我可以告诉一个特定的[BeforeScenario] 方法首先执行一个“基础”[BeforeScenario] 方法,比如在覆盖方法中调用基础方法?
当然,我可以明确地称其为“基础”[BeforeScenario] 方法 - 但这似乎有点像大锤方法.....
有什么想法吗?想法?指针?
【问题讨论】: