我已经按照以下方式实现了代码。
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'
当我运行这些场景时。我收到了以下错误:
- 的&GT;绑定错误:为步骤'给定我添加新'客户''找到不明确的步骤定义:BaseDocumentStep 1.GivenIAddNew(String), BaseDocumentStep
1.GivenIAddNew(String)
在场景之后
我无法弄清楚,为什么specflow会认为此步骤不明确?
先谢谢。 阿迪。
答案 0 :(得分:0)
阿迪,
您是否有任何理由要使用抽象类进行测试?我已经使用specflow几年了,我一直试图让它们保持简单和线性。您可以尝试用以下步骤替换步骤定义文件:
[Binding]
public class EmployeeSteps
{
[Given(@"I Add New '(.*)'")]
public void GivenIAddNew(string p0)
{
Console.WriteLine(p0);
}
}
这对我来说很好。除非你有其他理由不让你的步骤这么简单,否则这应该可以正常工作。
答案 1 :(得分:0)
这里的问题是,在Specflow中,所有步骤都是全局的,因此如果在基类中声明一个步骤,那么该步骤也会在每个派生类中声明。所以你得到一个
的实例 var settings = {
"async": true,
"crossDomain": true,
"url": "http://mycrm.com/service/v4_1/rest.php",
"method": "POST",
"headers": {
"cache-control": "no-cache",
"postman-token": "e85b8af0-3234-45c8-f5ec-abe8xx4d6efd",
"content-type": "application/x-www-form-urlencoded"
},
"data": {
"method": "get_entry",
"input_type": "json",
"response_type": "json",
"rest_data": "{\"session\":\"xxyyxxsmkdemnmdm1212\",\"module_name\":\"Accounts\",\"id\":\"12345-6789-1214-1234\",\"select_fields\":{},\"link_name_to_fields_array\":{ }, \"track_view\":true}"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
<{1}}和[Given(@"I Add New '(.*)'")]
public void GivenIAddNew(string p0)
{
Console.WriteLine(p0);
}
中的
不应在基类中声明步骤绑定方法,因为它们是全局的,所以始终可以找到这些步骤。
您想要通过通用设计实现的目标并不完全清楚,但也许如果您提供更多相关信息(可能是另一个问题更好),那么我们可以帮助您实现不需要使用绑定类继承的解决方案。