微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AutoFixture AutoDataAttribute 自定义超越派生属性

如何解决AutoFixture AutoDataAttribute 自定义超越派生属性

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

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

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

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

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。