zac*_*ary 5 unit-testing unity-container
我正在对使用统一依赖注入框架的类进行单元测试.
返回null:ServiceLocator.Current.GetInstance();
我怎样才能让它返回一个模拟对象或只是对象本身?
你可以利用穷人的注射。创建一个默认构造函数,它从服务定位器中检索依赖项,并将这些依赖项转发到一个“真实”构造函数,该构造函数将它们作为参数。这会照顾到生产情况。
然后在测试有问题的类时,将依赖项的假/模拟版本传递给“真实”构造函数,完全绕过默认构造函数。
MSDN 有这个示例,展示了如何使用 Unity 实现服务定位器模式。本质上,您应该将服务定位器对象作为类的构造函数参数传递。这使您能够通过测试MockUnityResolver,从而完全控制单元测试。
[TestMethod]
public void InitCallsRunOnNewsController()
{
MockUnityResolver container = new MockUnityResolver();
var controller = new MockNewsController();
container.Bag.Add(typeof(INewsController), controller);
var newsModule = new NewsModule(container);
newsModule.Initialize();
Assert.IsTrue(controller.RunCalled);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6867 次 |
| 最近记录: |