【问题标题】:Mocked interface is returning null模拟接口返回 null
【发布时间】:2020-04-07 05:40:57
【问题描述】:

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

【问题讨论】:

标签: c# unit-testing moq


【解决方案1】:

在您当前的代码中,模拟工厂的 Create 方法返回一个 It.IsAny&lt;IUnitOfWork&gt; 类型的对象。

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

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

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多