模拟接口返回null

时间:2020-04-06 21:18:50

标签: c# unit-testing moq

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

1 个答案:

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