autofixture:删除自定义

autofixture: removing a customization

在我的 NUnit 测试设置中,我创建了 AutoFixture 定制,我需要为我的对象预定义值。然而,这些仅仅是默认值——一些测试需要以某种方式覆盖这些默认值。这就是我添加自定义项的方式:

        fixture.Customizations.Add(new FilteringSpecimenBuilder(new FixedBuilder(value),
            new ParameterSpecification(valueType, propertyName)));

如果我只是在测试中添加新的定制,定制实际上不会被应用,因为它在图表中较低。

所以我认为我可以做的是 remove 与我之前创建的 FilteringSpecimenBuilder 的签名相匹配的自定义,但这似乎不起作用,除非它是我在设置。为了让它起作用,我必须保存以备后用并对我在设置中创建的所有实例进行分类,这似乎是多余的,因为它们已经是 Fixture 图的一部分。

然后我尝试了类似的操作,其中 "name" 是我要删除的变量的实际名称,但显然引用 TargetType 和 TargetName 属性是不允许的,因为它们已经过时(并且错误消息没有解释替换是什么):

        fixture
            .Customizations
            .OfType<FilteringSpecimenBuilder>()
            .Where(x => x.Specification is ParameterSpecification)
            .Where(x=>(((ParameterSpecification)x.Specification).TargetName == "name"))
            .ToList()
            .ForEach(c => fixture.Customizations.Remove(c));

有谁知道替换自定义项或删除现有自定义项的方法吗?

如果您想覆盖现有功能,最简单的解决方案是将它放在之前您要覆盖的自定义。 Add 方法添加到集合的末尾,所以使用 Insert 代替:

fixture.Customizations.Insert(0, new MySpecimenBuilder());

在索引 0 处插入会将构建器置于其他任何内容之前,这意味着它将是第一个被检查的。