替换 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;
}
}
在 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;
}
}