ICloneable 的 C# 测试用例

Posted

技术标签:

【中文标题】ICloneable 的 C# 测试用例【英文标题】:C# test cases for ICloneable 【发布时间】:2022-01-09 11:02:57 【问题描述】:

如何在编写测试用例时获得object ICloneable.Clone() 方法的覆盖率。

 #region ICloneable Members

    object ICloneable.Clone()
    
        return this.Clone();
    

    public new Blue Clone()
    
        Blue _temp = (Blue)this.MemberwiseClone();
        _temp.Node = Node.Clone();

        return _temp;
    

    #endregion

目前的覆盖范围是这样的

.

【问题讨论】:

你不能只new你的类的实例,设置所有的属性。然后克隆它并断言属性的值。直接调用它,并通过转换为IClonable,将结果转换回您的类型 我希望我可以修改现有功能的实现方式,但我不能;只需要编写测试用例。 @Flydog57 我正在描述两个测试,而不是更改现有代码 好吧,你的意思是这样吗? ICloneable 可克隆 = (ICloneable) blue.Clone();我试过但没有覆盖。 @RohanNirer object b = ((ICloneable)blue).Clone(); 请注意,在调用 Clone 之前先将蓝色转换为 ICloneable。您可以随时回退以进行比较和断言 【参考方案1】:

虽然这些可能是不同的情况,但这里有一个非常简化的测试/覆盖所示代码的示例。

//Arrange
Blue expected = new(); //populate as needed

//Act
Blue a = expected.Clone();
Blue b = (Blue)((ICloneable)expected).Clone();

//Assert - using FluentAsertions - cases should be self explanatory 
a.Should().BeEquivalentTo(b); 
a.Should().BeEquivalentTo(expected);
b.Should().BeEquivalentTo(expected);

【讨论】:

以上是关于ICloneable 的 C# 测试用例的主要内容,如果未能解决你的问题,请参考以下文章

C#代码自动测试

C# 创建一个简单的单元测试实例(MSTest框架)

执行测试用例应注意啥?

测试用例模板组成

标准测试中一天能写多少测试用例?执行多少用例?这个有标准不?

软件测试的分类&测试用例的设计&如何编写测试用例