bdd - 如何将空值输入到 specflow 步骤定义表中

标签 bdd specflow gherkin

如何通过表格在 Specflow 中输入空值?

让我们看一个过于简单的例子:

When a tire is attached to a car
| CarId | TireModel      | FabricationDate | Batch |
| 1     | Nokian Hakka R | 2015-09-1       |       |

Batch 列中的空字符串被 specflow 解释为文本,因此,空字符串。是否有特殊语法将该列标记为空?

最佳答案

您可以创建自己的 IValueRetriever 并用您的替换默认值

public class StringValueRetriver : IValueRetriever
{
    public bool CanRetrieve(KeyValuePair<string, string> keyValuePair, Type targetType, Type propertyType)
    {
        return propertyType == typeof(string);
    }

    public object Retrieve(KeyValuePair<string, string> keyValuePair, Type targetType, Type propertyType)
    {
        return string.IsNullOrEmpty(keyValuePair.Value) ? null : keyValuePair.Value;
    }
}

在你的场景步骤中的一些地方

[BeforeScenario]
public void BeforeScenario()
{
    Service.Instance.ValueRetrievers.Unregister<TechTalk.SpecFlow.Assist.ValueRetrievers.StringValueRetriever>();
    Service.Instance.ValueRetrievers.Register(new StringValueRetriver());
}

旧语法:

[BeforeScenario]
public void BeforeScenario()
{
    var defaultStringValueRetriever = Service.Instance.ValueRetrievers.FirstOrDefault(vr => vr is TechTalk.SpecFlow.Assist.ValueRetrievers.StringValueRetriever);
    if (defaultStringValueRetriever != null)
    {
        Service.Instance.UnregisterValueRetriever(defaultStringValueRetriever);
        Service.Instance.RegisterValueRetriever(new StringValueRetriver());
    }
}

关于bdd - 如何将空值输入到 specflow 步骤定义表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908611/

相关文章:

c# - 在 SpecFlow 中运行 [BeforeScenario] 时受什么控制?

javascript - 如何查找已使用 WatiN 打开的 JavaScript 警报

java - 使用 Cucumber 数据表注册 LocalDateTime xstream 转换器

c# - .net 和 c# 的成熟 BDD(行为驱动开发)框架

cucumber - 重复specflow中的步骤

testing - 使用 Cucumber & Devise gems 测试登录用户时,我是否必须每次都登录?

java - 如何概括 Selenium Cucumber 中的登录步骤并避免功能文件中的重复步骤?

c# - 在 Specflow 中的两个特征文件之间重用背景定义

bdd - 对我的小 cucumber 感到困惑 - 网页之间的导航

cucumber - 如何在 Cucumber 中使用多个参数集进行测试自动化?