模拟接口返回 null

Mocked interface is returning null

我对使用 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?

在您当前的代码中,模拟工厂 return 的方法 Create 是一个类型为 It.IsAny<IUnitOfWork> 的对象。

但是您希望您的模拟工厂 return 工作单元的 模拟 ,例如:

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);