Перемешанный интерфейс возвращает ноль - PullRequest
1 голос
/ 07 апреля 2020

Я довольно новичок в использовании Moq и сталкиваюсь с проблемой, когда один из моих вызовов методов возвращает ноль, несмотря на то, что я имитировал его.

Я издеваюсь над следующими интерфейсами.

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 возвращает ноль?

1 Ответ

2 голосов
/ 07 апреля 2020

В вашем текущем коде метод 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);
...