我已经通过代码覆盖率运行了我的代码,下面的行显示 1 个块未被覆盖。
谁能告诉我该行的哪一部分没有执行?
一个可以玩的例子:
public abstract class Base
{
public abstract IExample CreateEntity<TExample>() where TExample : IExample, new();
}
public class Class1 : Base
{
public override IExample CreateEntity<TExample>()
{
IExample temp = new TExample();
return temp;
}
}
public interface IExample
{
}
public class TEx : IExample
{
}
和测试方法
[TestMethod]
public void TestMethod1()
{
Class1 ex = new Class1();
ex.CreateEntity<TEx>();
}
改变你的约束来强制TExample
成为一个班级:
public abstract IExample CreateEntity<TExample>() where TExample : class, IExample, new();
如果您通过 ILSpy 等工具运行编译后的代码,您将看到未覆盖的块:
TExample temp = (default(TExample) == null) ? Activator.CreateInstance<TExample>() : default(TExample);
return temp;
它正在执行检查以查看传递给泛型的类型是引用类型还是值类型。通过强制它成为一个类,该检查将被删除。在此处阅读有关默认关键字的更多信息:http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx
获得完整代码覆盖率的另一种方法是使用实现IExample
:
public struct S1 : IExample
{
}
然后添加这个测试:
[TestMethod]
public void StructTest()
{
Class1 ex = new Class1();
ex.CreateEntity<S1>();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)