2016-02-13 41 views
0

我试图设置服务定位进行单元测试,像这样:起订量设置服务定位

var mockS = new Mock<IServiceLocator>(); 
ServiceLocator.SetLocatorProvider(() => mockS.Object); 
mockS.Setup(x => x.GetInstance<IObjectFactoryMethod<IAddress>>()).Returns(new Mock<ObjectsFactory>().Object); 

var factoryMock = new Mock<IObjectFactoryMethod<IAddress>>(MockBehavior.Strict); 
factoryMock.Setup(x => x.Create(null)).Returns(new Mock<IAddress>()); 

var factory = ServiceLocator.Current.GetInstance<IObjectFactoryMethod<IAddress>>(); 

// testing - factory returns null 
var address = factory.Create(null); // address is null 

代码执行罚款。工厂在调试过程中显示为模拟工厂,但是当调用Create(null)时,它会返回null而不是新的IAddress模拟。

+0

你“创造”似乎是你不使用的对象上设置。 –

回答

3

尝试这样:

var mockS = new Mock<IServiceLocator>(); 
ServiceLocator.SetLocatorProvider(() => mockS.Object); 

var factoryMock = new Mock<IObjectFactoryMethod<IAddress>>(MockBehavior.Strict); 
factoryMock.Setup(x => x.Create(null)).Returns(new Mock<IAddress>().Object); 

mockS.Setup(x => x.GetInstance<IObjectFactoryMethod<IAddress>>()).Returns(factoryMock.Object); 

var factory = ServiceLocator.Current.GetInstance<IObjectFactoryMethod<IAddress>>(); 

// testing - factory returns null 
var address = factory.Create(null); // address is null 
+0

的作品。真棒!谢谢 – ShaneKm

+0

factoryMock =>应该是factoryMock.Object,并且新模拟()=>应该是:new Mock ().Object – ShaneKm

+0

我会修复相应的答案,谢谢。我还没有rev环境在 –