moq对象返回方法,应该返回一个null对象

时间:2011-10-27 17:08:38

标签: c# asp.net-mvc-3 mocking moq wcf-web-api

我正在开发一个Web API,我提出的一个测试是,如果客户端使用物理测试ID(物理测试是我正在寻找的资源)进行GET操作,那么物理测试如果找不到,则Web API应返回404状态。

现在,我正在使用moq框架进行测试,我有以下代码:

[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()方法返回一个null对象,如果找不到该资源,它将是实际API方法返回的对象。

我尝试在Returns()方法中将null作为参数发送,但没有成功。

3 个答案:

答案 0 :(得分:165)

您没有说明错误是什么,但这应该有效:

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

我怀疑你试图用Returns(null)调用它,这导致编译器抱怨,因为Returns被重载并且它不知道应该调用哪个方法。转换为特定类型可消除歧义。

答案 1 :(得分:1)

rt是方法的返回类型:FindById

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

答案 2 :(得分:0)

你可以试试这个:

ref1.Setup(s => s.Method(It.IsAny<Ref2>(), It.IsAny<string>()))
     .Returns((Task<Ref3>)null);

ref1 = Mock Interface
Ref2 = Type request parameter
Ref3 = Type of return method mock