【问题标题】:AutoFixture AutoDataAttribute Customization Beyond Derived AttributeAutoFixture AutoDataAttribute 自定义超越派生属性
【发布时间】:2021-09-02 15:05:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: autofixture fakeiteasy xunit2


    【解决方案1】:

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

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

    【讨论】:

    • 这也是我所处的位置。我同意我不喜欢失去属性提供的简洁性。
    猜你喜欢
    • 2012-06-02
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多