Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试以通用方式c#,specflow实现时步骤定义不明确_C#_Visual Studio 2015_Nunit_Specflow - Fatal编程技术网

尝试以通用方式c#,specflow实现时步骤定义不明确

尝试以通用方式c#,specflow实现时步骤定义不明确,c#,visual-studio-2015,nunit,specflow,C#,Visual Studio 2015,Nunit,Specflow,我以以下方式实现了代码 public abstract class BaseDocumentStep<T> where T : class, new() { protected T _document; [Given(@"I Add New '(.*)'")] public void GivenIAddNew(string p0) { Console.WriteLine(p0); } b) 员工特征 Scenario: A

我以以下方式实现了代码

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

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

 Scenario: Add New Employee
Given I Add New 'Employee'
当我运行这些场景时。我得到了以下错误:

->绑定错误:为步骤“给定我添加新的“客户”找到不明确的步骤定义:BaseDocumentStep
1.GivenIAddNew(字符串),BaseDocumentStep
1.GivenIAddNew(字符串) 场景之后

我不明白,为什么SPEFEP认为这个步骤是模棱两可的?

提前谢谢。 Adi.

Adi

您有什么理由想在测试中使用抽象类吗?我已经使用specflow好几年了,我一直试图保持它们的简单和线性。是否可以尝试用以下内容替换步骤定义文件:

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

这对我来说很好。除非你有其他理由不让你的步骤这么简单,否则这应该很好。

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

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

步骤绑定方法不应在基类中声明,因为步骤是全局的,所以始终可以找到这些步骤


目前还不清楚您希望通过泛型设计实现什么,但如果您提供更多信息(可能另一个问题更好),那么我们可能可以帮助您找到一个不需要绑定类继承的解决方案。

可能会提供继续使用继承的选项,但是请注意,由于当前VS扩展中存在问题,使用作用域可能会导致导航到StepsTanks Leibniz以获取答复时出现问题。是的,使用抽象类是有原因的。应用程序是一个遗留应用程序,使用MVP模式实现。我们正在使用specflow测试表示层。所以我们有一些常见的步骤,但保存过程取决于我们传递的对象的类型。这就是我们使用抽象类的原因。e、 基本用户是抽象类。普通用户继承基本用户,超级用户也继承基本用户。
 Scenario: Add New Employee
Given I Add New 'Employee'
[Binding]
public class EmployeeSteps
{
    [Given(@"I Add New '(.*)'")]
    public void GivenIAddNew(string p0)
    {
        Console.WriteLine(p0);
    }
}
[Given(@"I Add New '(.*)'")]
public void GivenIAddNew(string p0)
{
    Console.WriteLine(p0);
}