创建generics类型参数的新实例,但不获取代码覆盖率

我通过代码覆盖运行我的代码,下面的行显示1块未覆盖。

任何人都可以告诉我该行的哪一部分没有执行?

在此处输入图像描述

一个例子:

public abstract class Base { public abstract IExample CreateEntity() where TExample : IExample, new(); } public class Class1 : Base { public override IExample CreateEntity() { IExample temp = new TExample(); return temp; } } public interface IExample { } public class TEx : IExample { } 

和测试方法

  [TestMethod] public void TestMethod1() { Class1 ex = new Class1(); ex.CreateEntity(); } 

更改约束以强制TExample成为类:

 public abstract IExample CreateEntity() where TExample : class, IExample, new(); 

如果您通过ILSpy之类的工具运行已编译的代码,您将看到未获得覆盖的块:

 TExample temp = (default(TExample) == null) ? Activator.CreateInstance() : default(TExample); return temp; 

它正在执行检查以查看传递给generics的类型是引用类型还是值类型。 通过强制它成为一个类,这个检查将被删除。 在此处阅读有关默认关键字的更多信息: http : //msdn.microsoft.com/en-us/library/xwth0h0d.aspx

获得完整代码覆盖率的另一种方法是使用实​​现IExample的结构:

 public struct S1 : IExample { } 

然后添加此测试:

 [TestMethod] public void StructTest() { Class1 ex = new Class1(); ex.CreateEntity(); }