【发布时间】:2018-02-21 17:50:55
【问题描述】:
我有一个名为IDeepClonable 的接口,它公开了DoDeepClone 方法。
但出于性能原因,每个深度克隆都是手动实现的。
我想编写一个测试,它能够检查在我的程序集中实现接口的任何对象,它确实正确地进行了深度克隆。
验证很容易,我有一个名为 DeepEqual 的库来检查这个。
问题是要确保所有字段都没有默认值!
ef: null 表示字符串,0 表示 int 等
此外,用户可能会执行以下操作:
public int MyNumber = 5;
好吧,我可以忘记深度克隆它,但测试仍然会 b=通过,因为原始和克隆的值都是 5。
有什么方法可以改变任意对象(主要是值类型)以确保每个字段都不同?
我也有类似 TimeSpan 的东西。
天真的解决方案是简单地构建一个人工维护的类型默认值列表,但我想知道是否有办法自动执行此操作。
【问题讨论】:
-
我知道你来自哪里。但在某种程度上,问题归结为如何在没有“安排”的情况下编写有效的单元测试。为了成功测试,您必须创建测试条件,其中包括非默认值。我通常不在测试中使用随机值,但也许在这种情况下它会有所帮助。随机整数、随机日期、字符串的 guid。
标签: c# unit-testing clone