繁体   English   中英

AutoFixture和私有属性

[英]AutoFixture and private properties

是否可以指示AutoFixture还填充所有类的特定属性(如Ninject.Inject注释的私有属性? 该来源似乎只扫描公共财产: 1 此问题为具有私有设置器的特定MyClass提供了解决方案,但不针对私有属性或所有类提供: 2

我正在使用Moq来模拟服务,最后我想用这些模拟来填充属性。 如果我将MyService依赖项publicpublic则以下设置可以正常工作。

一些示例代码:

public class MyController {
    [Inject]
    private IMyService MyService { get; set; }

    public void AMethodUsingMyService() {
        MyService.DoSomething();
        // ...
    }

    // ...
}

public class MyService : IMyService {
    public void DoSomething()
    {
        // ...
    }

    // ...
}

public class MyControllerTest {
    [Theory]
    [AutoMoqData]
    public void MyTest(MyController controller) {
        controller.AMethodUsingMyService();
    }
}

AutoFixture没有内置支持将值分配给非公共字段或属性。 这是设计的。

AutoFixture是用于单元测试的实用程序库,单元测试不应直接调用 SUT的 私有成员

AutoFixture最初是作为测试驱动开发(TDD)的工具而构建的,而TDD则是关于反馈的。 本着GOOS的精神,你应该听听你的测试。 如果测试难以编写,则应考虑API设计。 AutoFixture倾向于放大那种反馈,所以我的第一反应是挑战想要这样做的动机。

由于您正在引用NInject,看起来好像您正在使用依赖注入(DI)。 然而,私人房产注入的DI听起来很奇特。 考虑使属性公开,甚至更好,使用构造函数注入而不是属性注入。

这将使AutoFixture像Auto-Mocking Container一样自动工作。

但是,AutoFixture是一个非常可扩展的库,所以如果你真的必须这样做,应该可以写一个可以写入私有属性的扩展,但它不会是有史以来最简单的AutoFixture扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM