我有一个奇怪的例子,执行的顺序搞砸了
我为所有步骤定义
创建了一个基类public abstract class BaseSteps
{
static BaseSteps()
{
Console.WriteLine("static Constructor");
}
protected BaseSteps()
{
Console.WriteLine("public Constructor");
}
[BeforeTestRun]
public static void BeforeTestRun()
{
Console.WriteLine("static void BeforeTestRun");
}
[AfterTestRun]
public static void AfterTestRun()
{
Console.WriteLine("static void AfterTestRun");
}
[Before]
public static void Before()
{
Console.WriteLine("Base Before Scenario");
}
}
[Binding]
public class SpecFlowFeature1Steps: BaseSteps
{
public SpecFlowFeature1Steps()
{
}
[BeforeScenario()]
public void Setup()
{
}
但是我的调试模式的执行顺序看起来很像这个
我原以为它就像 ...
...
知道为什么这样做会这样吗?
TIA
答案 0 :(得分:2)
正如Sam解释的那样,步骤定义/ hooks / step参数转换是全局的,因此您不需要基类来共享逻辑。我前段时间写了一篇文章,详细说明了这一点:http://gasparnagy.com/2015/05/specflow-tips-problems-with-placing-step-definitions-to-base-classes/
答案 1 :(得分:0)
在specflow中,所有步骤都是全局的,因此不需要在基类中添加步骤,如果这样做会导致问题,因为每个子类中都存在步骤。
解决方案是让您的SpecFlowFeature1Steps
类不继承BaseSteps
或将BaseSteps
中的实际步骤移动到另一个类中(如果基本步骤包含您要使用的某些基本功能) - 但如果可能的话,我会避免这种情况)
你不能以你想要的方式依赖或订购钩子。正确的方法是使用Order attribute