AutoFixture AutoDataAttribute 自定义超越派生属性

AutoFixture AutoDataAttribute Customization Beyond Derived Attribute

我在很多项目中都在 AutoFixture.Xunit2 中使用 AutoDataAttribute class。添加您自己的自定义项的推荐方法似乎是如下所示的派生属性(注意我使用的是 FakeItEasy):

    public class AutoFakeItEasyDataAttribute : AutoDataAttribute
    {
        public AutoFakeItEasyDataAttribute()
            : base(() => new Fixture().Customize(new DomainCustomization()))
        {
        }
    }

为了减少代码 copying/pasting,我想将这个派生属性抽象为一个我们可以在项目中使用的包。然而,尽管尝试将 this library 和 运行 的依赖注入用于 CLR 问题,但 DataAttribute 无法处理基本“原语”之外的任何内容,我已经 运行 进入了众所周知的“砖墙”。显然,构造函数注入在这里似乎不起作用,据我所知 属性 注入(尽管这不太重要,因为 属性 直到构造函数调用之后才分配)。

最重要的是,我正在寻找一种方法将此派生属性包含到一个包中,但可以根据每个项目的需要自定义域?

由于属性在 C# 中的工作方式,我认为您尝试实现的目标是不可能的。正如您自己提到的,您不能传递给属性,只能传递一小组原始值,并且在 xUnit 2 数据属性中无法访问测试 class 实例,因此您不能通过反射注入实例。

理论上您可以使用您提到的库将 IFixture 实例注入到测试 class 中(我认为这是一种可怕的做法,它会促进更草率的测试),但是您会放弃 AutoFixture 的装饰器符号并使用声明性符号来创建您的测试数据。