这篇博文展示了一种使用 Castle Windsor 和 NSubstitute 实现自动模拟的方法。
我不知道也不使用 Castle Windsor,但我确实使用 Unity 和 NSubstitute。
有没有办法用 Unity 做他展示的事情?
以下是帖子的相关内容:
首先,在 Windsor 中注册一个 ILazyComponentLoader:
var c = new WindsorContainer();
c.Register(Component.For<LazyComponentAutoMocker>());
那么,LazyComponentAutoMocker 的实现就很简单了:
public class LazyComponentAutoMocker : ILazyComponentLoader
{
public IRegistration Load(string key, Type service, IDictionary arguments)
{
return Component.For(service).Instance(Substitute.For(new[] { service }, null));
}
}
你完成了!这是一个简单的单元测试示例,仅使用上面的代码:
[Test]
public void IDictionary_Add_Invoked()
{
var dict = c.Resolve<IDictionary>();
dict.Add(1, 1);
dict.Received().Add(1, 1);
}