[英]AutoFixture and private properties
我是否可以指示AutoFixture还填充所有类的特定属性(如Ninject.Inject
注释的私有属性? 该来源似乎只扫描公共财产: 1 。 此问题为具有私有设置器的特定MyClass
提供了解决方案,但不针对私有属性或所有类提供: 2 。
我正在使用Moq来模拟服务,最后我想用这些模拟来填充属性。 如果我将MyService依赖项public
为public
则以下设置可以正常工作。
一些示例代码:
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.