我正在开发一个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作为参数发送,但没有成功。
答案 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