替换 Specflow 3.3 中的 NullValueRetriever 功能

Replacement for NullValueRetriever functionality in Specflow 3.3

在 Specflow 3.1 中,NullValueRetriever 可用于指定字符序列以标识哪些 table 值应转换为 NULL(如 {NULL})。在 Specflow 3.3 中,ValueRetriever 已被重构,NullValueRetriever 已被删除。

我想知道我应该如何替换 NullValueRetriever 功能,并指出我想为对象的特定 属性 设置一个 NULL 值。

ClassRetriever, or StringRetriever 的代码表示表格中的空单元格将转换为 String.Empty 而不是 null

这是一个错误,我们删除了 NullValueRetriever。对不起。
它是唯一的检索器,默认情况下不在列表中,因为它必须由用户配置。

我在 PR https://github.com/SpecFlowOSS/SpecFlow/pull/2067 中再次添加了它。 它应该在 3.3.57 之后的版本中返回。

以下是我如何为 SpecFlow 3.3 实现空值检索器

public class NullValueRetriever : IValueRetriever
{
    private readonly string _NullPattern;

    public NullValueRetriever(string pattern)
    {
        if (string.IsNullOrWhiteSpace(pattern))
        {
            throw new ArgumentException("Null, or empty strings are not allowed", nameof(pattern));
        }
        _NullPattern = pattern;
    }

    public bool CanRetrieve(KeyValuePair<string, string> keyValuePair, Type targetType, Type propertyType)
    {
        var value = keyValuePair.Value;

        // Refer to: 
        bool isNullableType = !propertyType.IsValueType ||
            (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(Nullable<>));

        return isNullableType &&
            value != null &&
            (string.Compare(value.Trim(), _NullPattern, StringComparison.InvariantCultureIgnoreCase) == 0);
    }

    public object Retrieve(KeyValuePair<string, string> keyValuePair, Type targetType, Type propertyType)
    {
        return null;
    }
}