如何为C#中ICloneable显式实现的Clone()方法编写测试用例获取覆盖率
问题原因
你采用了显式接口实现的方式编写ICloneable.Clone()方法,该方法只有在变量类型被显式声明为ICloneable时才会被调用。你平时直接用Blue类实例调用Clone()时,走的都是public new Blue Clone()重载,因此覆盖率工具统计不到显式实现的逻辑。
测试用例编写方法
你只需要在测试用例中将Blue实例强转为ICloneable类型后再调用Clone()方法,即可命中显式实现的代码,示例如下(以常用单元测试框架为例):
// 单元测试示例 public void ICloneableClone_Test() { // 初始化测试用的Blue实例 Blue original = new Blue(); // 补充你需要的original属性初始化逻辑,比如给Node赋值 original.Node = new YourNodeType(); // 核心:转为ICloneable接口类型调用Clone,触发显式实现逻辑 ICloneable cloneableInstance = original; object clonedResult = cloneableInstance.Clone(); // 断言验证结果正确性 Assert.NotNull(clonedResult); Assert.IsType<Blue>(clonedResult); Blue clonedBlue = (Blue)clonedResult; Assert.NotSame(original, clonedBlue); Assert.NotSame(original.Node, clonedBlue.Node); }
运行上述测试用例后,你之前未覆盖的object ICloneable.Clone()方法就会被覆盖率工具统计到。
内容的提问来源于stack exchange,提问作者Rohan Nirer
相关产品推荐
相关产品推荐

