我有一个名为IDeepClonable
的界面,它公开了方法DoDeepClone
。
但是出于性能原因,每个深度克隆都是手工实现的。
我想编写一个测试,它能够检查在我的程序集中实现接口的任何对象,它确实可以正确深度克隆。
验证很简单,我有一个名为DeepEqual
的库来检查这个。
问题是要确保所有字段都没有默认值!
ef:null表示字符串,0表示int,等等。
此外,用户可能会执行以下操作:
public int MyNumber = 5;
好吧,我可以忘记深度克隆它,但测试仍然是b =通过,因为原始和克隆都有5作为值。
什么方法可以改变任意对象(主要是值类型)以确保每个字段都不同?
我也有像TimeSpans这样的东西。
天真的解决方案是简单地为类型构建一个人为维护的默认值列表,但我想知道是否有办法自动化它。
答案 0 :(得分:1)
基于反射和随机值实现目标的一些高级想法:
至关重要的是,阶段3中的随机函数会产生纯随机值。在bool-type的情况下,生成的值可能与默认值相同(因为有2个可能的值)。但是您可以多次执行此算法以确保至少使用一次唯一值。