【问题标题】:Autofixtures "With"-Customizations for are ignored when using Build<T>使用 Build<T> 时会忽略自动固定装置“With”- 的自定义
【发布时间】:2017-01-19 15:25:58
【问题描述】:

我的目标是能够只定义与特定测试相关的参数,在 c# 中使用不可变类型(严格构造函数注入,没有 set'ers),并有一个定制的夹具来处理参数的有效值未在测试中指定。

在这个问题上摸不着头脑 - 我对字符串、DateTime 和 int 的“with”属性自定义被忽略了。基于“客人”的示例:

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&lt;Guest&gt;() 时有效,但在使用fixture.Build&lt;Guest&gt;().With(g=&gt;g.Surname, "Olsen") 时无效。

查看 AutoFixture 签名,我知道这是因为 Fixture.Build&lt;T&gt;() 实例化了一个新的作曲家,并且该作曲家没有作为 Customize&lt;T&gt; 方法的“作曲家”实例注入。 另外-我知道属性的第一个自定义“获胜”,因此必须将“覆盖”推到自定义前面...

有什么建议吗?我是不是完全不了解,想用螺丝刀敲钉子?或者我只是在这里没有看到一些聪明和/或明显的东西......

【问题讨论】:

标签: c# autofixture


【解决方案1】:

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

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

像魅力一样工作......

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多