我对使用Moq很陌生,但遇到一个问题,尽管我嘲笑了它,但我的方法调用之一却返回null。
我正在嘲笑以下界面。
public interface IUnitOfWorkFactory
{
IUnitOfWork Create(KnownDbContexts knownDbContexts);
}
public interface IUnitOfWork : IDisposable
{
Task SaveChanges();
IRepository Repository { get; }
}
然后在我的单元测试代码中看起来像这样。
_uowFactoryMock.Setup(x => x.Create(It.IsAny<KnownDbContexts>()))
.Returns(It.IsAny<IUnitOfWork>());
我正在测试的代码如下。
using (var uow = _unitOfWorkFactory.Create(KnownDbContexts.UserDefined1))
{
// At this point 'uow' is null.
}
为什么IUnitOfWorkFactory.Create返回null?
答案 0 :(得分:2)
在您当前的代码中,模拟工厂的Create方法返回一个It.IsAny<IUnitOfWork>
类型的对象。
但是,您希望模拟的工厂返回工作单元的 mock ,例如:
var uowMock = new Mock<IUnitOfWork>();
// here mock uowMock's methods (ie SaveChanges) in the same way it is done below for the factory
_uowFactoryMock.Setup(x => x.Create(It.IsAny<KnownDbContexts>()))
.Returns(uowMock.Object);