Moq 设置 ServiceLocator
Moq setting up ServiceLocator
我正在尝试为单元测试设置服务定位器,如下所示:
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) 时,它 returns null 而不是新的 IAddress 模拟。
尝试这样的事情:
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
我正在尝试为单元测试设置服务定位器,如下所示:
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) 时,它 returns null 而不是新的 IAddress 模拟。
尝试这样的事情:
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