【问题标题】:Ambiguous step definitions when try to implement in generic fashion c#, specflow尝试以通用方式 c#、specflow 实现时的模棱两可的步骤定义
【发布时间】:2016-11-30 14:29:31
【问题描述】:

我已经按照以下方式实现了代码。

public abstract class BaseDocumentStep<T> where T : class, new()
{
    protected T _document;

    [Given(@"I Add New '(.*)'")]
    public void GivenIAddNew(string p0)
    {
        Console.WriteLine(p0);
    }

}

[Binding]
public class CustomerSteps : BaseDocumentStep<Customer> 
{

}

[Binding]
public class EmployeeSteps : BaseDocumentStep<Employee>
{

}

功能文件:- a) 客户特征

Scenario: Add New Customer
Given I Add New 'Customer'

b) 员工特征

 Scenario: Add New Employee
Given I Add New 'Employee'

当我运行这些场景时。我收到以下错误:

-> 绑定错误:为步骤 'Given I Add New 'Customer'' 找到不明确的步骤定义:BaseDocumentStep1.GivenIAddNew(String), BaseDocumentStep1.GivenIAddNew(String) 场景后

我不明白,为什么 specflow 认为这一步是模棱两可的?

提前致谢。 阿迪。

【问题讨论】:

    标签: c# visual-studio-2015 nunit specflow


    【解决方案1】:

    阿迪,

    您有什么理由要使用抽象类进行测试吗?我已经使用 specflow 几年了,我一直试图让它们保持简单和线性。你可以尝试用这个替换你的步骤定义文件吗:

    [Binding]
    public class EmployeeSteps
    {
        [Given(@"I Add New '(.*)'")]
        public void GivenIAddNew(string p0)
        {
            Console.WriteLine(p0);
        }
    }
    

    这对我来说很好用。除非您有其他理由不让您的步骤如此简单,否则这应该可以正常工作。

    【讨论】:

    • 感谢莱布尼茨的回复。是的,有理由使用抽象类。应用程序是一个遗留应用程序,使用 MVP 模式实现。我们正在使用 specflow 对表示层进行测试。所以我们有一些共同的步骤,但保存过程取决于我们传递的对象的类型。这就是我们使用抽象类的原因。例如,基本用户是抽象类。 NormalUser 继承 Base User,Super User 也继承 base user 像这样。
    【解决方案2】:

    这里的问题是,在 Specflow 中所有步骤都是全局的,因此如果您在基类中声明一个步骤,那么该步骤也会在每个派生类中声明。所以你得到一个

    的实例
    [Given(@"I Add New '(.*)'")]
    public void GivenIAddNew(string p0)
    {
        Console.WriteLine(p0);
    }
    

    CustomerStepsEmployeeSteps

    不应在基类中声明步骤绑定方法,由于它们是全局的,因此始终可以找到步骤。

    目前尚不清楚您希望通过通用设计实现什么,但也许如果您提供更多有关此的信息(可能另一个问题更好),那么我们可能会帮助您找到不需要使用绑定类进行继承。

    【讨论】:

    • this answer 可能会提供继续使用继承的选项,但请注意,由于当前 VS 扩展中的问题,使用范围可能会导致导航到步骤时出现问题
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2018-01-07
    • 2014-10-15
    • 2011-07-16
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多