0

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

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

为了减少代码复制/粘贴,我想将此派生属性抽象为我们可以在项目中使用的包。然而,尽管尝试在这个库中使用依赖注入并遇到CLR 问题,DataAttribute除了基本的“原语”之外无法采取任何措施,我还是遇到了众所周知的“砖墙”。显然,构造函数注入似乎在这里不起作用,据我所知,属性注入也不起作用(尽管这不太重要,因为直到构造函数调用之后才分配属性)。

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

4

1 回答 1

1

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

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

于 2021-06-18T07:25:46.383 回答