Reflection 代码覆盖率不为';t标记使用<;T>;过去

Reflection 代码覆盖率不为';t标记使用<;T>;过去,reflection,nsubstitute,unit-testing,Reflection,Nsubstitute,Unit Testing,我不知道为什么我的代码覆盖率会出现这种情况,也许有人知道这种情况。 您可能知道,当到达代码行时,代码覆盖率为蓝色,未到达时为红色,部分到达代码行时为黄色 我编写了一个小映射器,它接收一个IDataReader并通过反射变成对象 internal IEnumerable<T> Convert<T>(System.Data.IDataReader dataReader) where T : new() { var columns = this.GetColumns(d

我不知道为什么我的代码覆盖率会出现这种情况,也许有人知道这种情况。 您可能知道,当到达代码行时,代码覆盖率为蓝色,未到达时为红色,部分到达代码行时为黄色

我编写了一个小映射器,它接收一个IDataReader并通过反射变成对象

internal IEnumerable<T> Convert<T>(System.Data.IDataReader dataReader) where T : new()
{
    var columns = this.GetColumns(dataReader); // get a list of column name... not important.
    var result = new List<T>();

    while (dataReader.Read())
    {
        var nuevoObjeto = new T();  // <-- this line is yellow in code coverage.

        foreach (var item in columns)
        {
            var pi = nuevoObjeto.GetType().GetProperty(item);

            pi.SetValue(nuevoObjeto, dataReader[columns.IndexOf(item)]);
        }

        result.Add(nuevoObjeto);
    }

    return result;
}
内部IEnumerable转换(System.Data.IDataReader dataReader),其中T:new()
{
var columns=this.GetColumns(dataReader);//获取列名列表…不重要。
var result=新列表();
while(dataReader.Read())
{

var nuevoObjeto=new T();//尝试使用struct对其进行测试,或向泛型方法添加类约束-

为该行生成的IL等效于:

T nuevoObjeto = (default(T) == null) ? Activator.CreateInstance<T>() : default(T);
T nuevoObjeto=(默认值(T)=null)?Activator.CreateInstance():默认值(T);
这允许结构用于泛型类型,因为它们满足
new
约束


因此,如果您想要100%的代码覆盖率,请使用结构测试您的泛型方法,或者更改约束,要求泛型类型是一个使用
的类,其中T:class

查看生成的IL。可能有一些语句(可能是生成的捕获)代码覆盖率没有影响到这一点。可能重复的是类约束的示例吗?
Convert(System.Data.IDataReader dataReader)其中T:class,new()
。如果您的意思是使用struct进行测试,我不知道作者使用的是哪个测试框架(他没有提供测试代码),所以我不能写代码…所以,如果这句话是黄色的。事实上,我只是在约束上用类更改了我的代码,它达到了100%的覆盖率。谢谢。