纯粹是因为它让我烦恼,我的单元测试中缺少什么代码块? 我有一个通用的映射方法,如下所示:
public static dynamic To<T>(dynamic input)
{
if (input == null || input is DBNull)
{
return null;
}
try
{
return (T)input; // this line remains gray in code coverage
}
catch
{
return default(T);
}
}
我有一些简单的测试:
Assert.Null(Map.To<long>(null));
Assert.Null(Map.To<long>(DBNull.Value));
Assert.AreEqual(20, Map.To<long>(new long?(20)));
Assert.Null(Map.To<long?>("wrong"));
现在我的代码覆盖范围说我覆盖了49个区块中的48个。一个块未被覆盖,它位于return (T)source
行的某个位置。
我不禁想到我在这里忽略了一个简单的案例......
N.B。此代码并不是要将所有内容转换为任何内容,它只是在实践中将数据库类型转换为本机类型。在我完成之前,它将抛出而不是返回default(T)
。