【发布时间】:2014-03-28 08:12:14
【问题描述】:
我可以指示AutoFixture 也填充所有类的私有属性,并使用特定属性(例如Ninject.Inject)进行注释吗?源似乎只扫描公共属性:1。此问题为具有私有设置器的特定 MyClass 提供了解决方案,但不适用于私有财产或所有类:2。
我正在使用 Moq 来模拟服务,最后我想用这些模拟来填充属性。如果我将 MyService 依赖项公开为 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();
}
}
【问题讨论】:
-
NB Ninject 2 或更高版本不支持注入
privates(它不应该在“马克的回答”中涵盖)。真的真的不要那样做 -
我使用的是 3.0.1.10 版本并且注入
privates 工作正常,只要您指示 Ninject 注入它们 (InjectNonPublic)。我同意马克的回答! -
该死的以为这个选项在 V2 reimpl 中也死了,但我坚持纠正。这意味着文档是错误的(它说当我上次查看并在 2 年前使事情保持一致时,在很多地方都从 V2 中删除了注入私人信息)。遗憾的是,我无法激励自己在 wiki 中修复这些案例 - 希望其他人可以。
标签: c# autofixture