【问题标题】:autofixture: removing a customizationautofixture:删除自定义
【发布时间】:2018-05-29 23:32:43
【问题描述】:

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

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

如果我只是在测试中添加一个新的自定义项,该自定义项实际上不会被应用,因为它在图表的下方。

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

然后我尝试了类似的方法,其中“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));

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

【问题讨论】:

    标签: autofixture


    【解决方案1】:

    如果您想覆盖现有功能,最简单的解决方案是将其放在您要覆盖的自定义项之前Add 方法添加到集合的末尾,因此请改用 Insert

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

    在索引0 处插入将该构建器置于其他任何位置之前,这意味着它将首先被检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多