moq objects Возвращает метод, должен возвращать нулевой объект - PullRequest
60 голосов
/ 27 октября 2011

Я разрабатываю веб-API, и один из тестов, который я придумал, заключается в том, что если клиент выполняет операцию GET с идентификатором физического теста (физический тест - это ресурс, который я ищу), и этот физический тестне найден, веб-API должен возвращать статус 404.

Теперь я использую moq framework для своих тестов и у меня есть следующий код:

[TestMethod]
public void then_if_physical_test_not_found_return_not_found_status()
{
    var unitOfWork = new Mock<IUnitOfWork>();
    var repository = new Mock<IRepository<PhysicalTest>>();
    repository.Setup(r => r.FindById(It.IsAny<int>())).Returns();
    unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
    var pt = new PhysicalTestResource(unitOfWork.Object);
    HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43);
    Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}

Мне нужны Returns() метод для возврата нулевого объекта, который будет тем же, что и фактический метод API, который будет возвращен, если ресурс не найден.

Я пытался отправить ноль в качестве параметра в методе Returns (), но не имелуспех.

Ответы [ 2 ]

172 голосов
/ 27 октября 2011

Вы не указываете, в чем заключалась ошибка, но это должно сработать:

unitOfWork.Setup(m => m.PhysicalTests).Returns((IRepository<PhysicalTest>)null);

Я подозреваю, что вы пытались вызвать его с помощью Returns(null), что вызывает жалобу компилятора, поскольку Returnsперегружен, и он не знает, какой метод должен быть вызван.Приведение к определенному типу устраняет неоднозначность.

2 голосов
/ 31 июля 2018

rt - это метод возврата типа: FindById

repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(Task.FromResult((rt)null));

...