控制反转(或IoC)在第一次遇到时会非常混乱.
扩展方法不适合测试(这里描述:使用Moq模拟扩展方法,http://www.clariusconsulting.net/blogs/kzu/archive/2009/12/22/Howtomockextensionmethods.aspx).
但是可能有一些模拟Unity方法的解决方案?在我的情况下,我有以下功能:
public class MyManager
{
public MyManager(IUnityContainer container) : base(container) { }
public IResult DoJob(IData data)
{
IMyLog log = MyContainer.Resolve<IMyLog>();
... use log.Id ...
MyContainer.Resolve<...>();//usage for other purposes...
}
Run Code Online (Sandbox Code Playgroud)
我想确定'DoJob'方法总是从容器中获取'IMyLog'对象,但不是来自其他来源......我怎么能测试它?
我最初的想法是改变'DoJob'方法的实现和使用:
IMyLog log = UnityContainer.Resolve(typeof(IMyLog)) as IMyLog;
Run Code Online (Sandbox Code Playgroud)
但'Resolve(Type t,...)'也是一种扩展方法......
欢迎任何想法.
PS请注意,"我的日志"对象是远离MyManager.DoJob创建的...