joe*_*erg 5 .net c# unit-testing
我正在编写单元测试并考虑实现类型的场景IClonable
.所以当然我想要一个测试Clone()
方法的单元测试.
[Test]
public void CloneObject()
{
MyType original = new MyType();
MyType clone = (MyType)original.Clone();
// Assert for equality
}
Run Code Online (Sandbox Code Playgroud)
所以我的第一个任务是拥有Assert
平等.我看到以下选项:
MyType
并逐个检查它们Equals()
in MyType
以MyType
说明两个实例是否相等(考虑到有时测试的相等性被视为生产代码的相等性)MyType
必须如此[Serializable]
,但如果它具有例如接口属性,有时很难做到)对于前两个我可以设置我的测试,他们运作良好.但是,如果我更改MyType
并添加其他属性怎么办?如果Clone()
不复制这个并且我不将它添加到checked属性列表或equals方法中,即使没有复制属性,我的测试仍会通过.
你是如何解决这种测试的?
您可以使用FluentAssertions库(TDD必备,IMO),它具有ShouldBeEquivalent
执行两个对象的图形比较的方法:
original.ShouldBeEquivalentTo(clone);
Run Code Online (Sandbox Code Playgroud)
比较算法可以通过可选options
参数自定义; 有关详细信息,请参阅他们的wiki.
为了使测试面向未来的(即,它打破了当新的属性添加到类,而不是对Clone
法),你可能想测试克隆的对象,其所有属性设置为随机非默认值.AutoFixture可以为您做到这一点.
// Arrange
var fixture = new Fixture();
var original = fixture.Create<MyType>();
// Act
var clone = original.Clone();
// Assert
clone.ShouldBeEquivalentTo(original);
Run Code Online (Sandbox Code Playgroud)
有用的链接:
归档时间: |
|
查看次数: |
1603 次 |
最近记录: |