我遇到的问题是AutoFixture似乎覆盖了冻结模拟的属性。模拟类的属性是只读的,从我读过的内容来看,AutoFixture不应该尝试用它做任何事情。
我已经在下面的LINQPad中包含了重现问题的代码。 Victim
是一个简单的测试类,具有两个只读属性。问题是,一旦我设置了Things
属性的期望并注册了模拟的Object
作为AutoFixture的实例返回Victim
类型,集合Things
包含不同的字符串。
要重现此问题,请在LINQPad中将以下代码作为 C#程序运行,并从NuGet引用 AutoFixture 和 Moq 。请务必包含命名空间 Moq 和 Ploeh.AutoFixture 。
我的期望是我应该找回我在Register
注册的对象,并且返回的Things
中的集合Victim
应该返回我在调用{{{{ 1}}。
SetupGet
答案 0 :(得分:4)
我的猜测是Things
的 Iterator 实际上是相同的,但它生成的字符串是不同的。这是actually by design,虽然我们后来意识到这不是一个特别好的设计决定。
在AutoFixture 3, this behavior has been changed。
如果我猜错了,这个问题将在AutoFixture 3中消失。在AutoFixture 2中你应该能够通过创建这样的夹具来解决它:
var fixture = new Fixture().Customize(new StableMultipeCustomization());