Autofixtures "With"-使用 Build<T> 时忽略自定义

Autofixtures "With"-Customizations for are ignored when using Build<T>

我的目标是能够只定义与特定测试相关的参数,在 c# 中使用不可变类型(严格构造函数注入,无设置器),并让自定义的夹具处理有效值对于测试中未指定的参数。

这让我抓狂 - 我的 "with" 属性- 字符串、DateTime 和 int 的自定义被忽略了。基于 "Guest" 的示例:

public class Guest
{
    public readonly string GuestId;
    public readonly string GivenName;
    public readonly string SurName;
    public readonly AgeCode AgeCategory;

    public Guest(string guestid, AgeCode ageCategory, string givenName, string surName)
    {
        AgeCategory = ageCategory;
        GivenName = givenName;
        SurName = surName;
        GuestId = guestid;
    }
}

我像这样自定义了一个 Fixture 实例:

        fixture.Customize<Guest>(composer =>
            composer
                .With(g => g.GivenName, "Finn")
                .With(g => g.GuestId, "1")
                .With(g => g.SurName, "Rasmussen")
            );

...在使用 fixture.Create<Guest>() 时有效,但在使用 fixture.Build<Guest>().With(g=>g.Surname, "Olsen") 时无效。

查看 AutoFixture 签名,我知道这是因为 Fixture.Build<T>() 实例化了一个新的作曲家,并且该作曲家没有作为 Customize<T> 方法的 'composer' 实例注入。 另外 - 我知道 属性 "wins" 的第一个定制,所以 "overwrites" 必须被推到定制的前面...

有什么建议吗?我在这里完全不对劲,试图用螺丝刀敲钉子吗?或者我只是没有看到这里明显的聪明 and/or...

对于发现此问题的其他人: 可以使用

更改构建类型的默认策略
Fixture.Register<TType>(Func<TType> creator)

很有魅力...