gpt4 book ai didi

c# - Autofixture Fixture.Customize - 为什么重载有不同的返回类型?

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:41 24 4
gpt4 key购买 nike

我想知道为什么通用 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 Interfaces 在当时风靡一时......

确实应该添加 an issue到 AutoFixture 存储库以从 Customize 中删除返回值...

关于c# - Autofixture Fixture.Customize - 为什么重载有不同的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48672741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com