我想知道为什么通用Customize
重载返回void
并在接受ICustomization
实例的非通用重载返回IFixture
时似乎改变了灯具?
// you cannot set this var, customize returns void
var configuredFixture = fixture.Customize<whatever>(x => x.OmitAutoProperties());
// this is valid
var configuredFixture = fixture.Customize(new AutoMoqCustomization());
我问是因为我曾考虑过使用流利的样式内联自定义,以进行如下所示的操作,但这当然是无效的。
var localFixture = fixture
.Customize(new AutoMoqCustomization())
.Customize<whatever>(x => x.OmitAutoProperties()));
最佳答案
总体答案是:因为我犯了错误
不幸的是,这两种方法并不特别相关,您应该真正将它们视为不同的,并且具有两个不同的名称,例如Foo<T>
和Bar
。
当我编写这些函数时,我想不出一个更好的名字。因此,不幸的是,但大多是偶然的相似。
在IIRC中,我在AutoFixture开发的不同阶段创建了这两种方法。航空,Customize<T>
首先。
使用AutoFixture后,我意识到使用AutoFixture的正式“模块”或“包装”系统会很好,因此我添加了ICustomization
和Customize
方法。
我的最初意图是可以将对Customize
的调用链接在一起,所以我添加了Fluent Interface(即返回了IFixture
实例)来启用该功能。这样做的目的是为了方便,但事后看来,我认为这是一个错误。该方法的确会改变输入参数,因此设计违反了Command Query Separation。
但是,以我的辩护,Fluent接口当时风靡一时...
确实应该将an issue添加到AutoFixture存储库中,以从Customize
中删除返回值...
关于c# - Autofixure Fixture.Customize-为什么重载具有不同的返回类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48672741/