我正在开发一个 Web API,我想出的一个测试是,如果客户端使用物理测试 ID(物理测试是我正在寻找的资源)进行 GET 操作,而物理测试不是发现,Web API 应该返回 404 状态。
现在,我正在使用最小起订量框架进行测试,并且我有以下代码:
[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() 方法中将 null 作为参数发送,但没有成功。
你没有指出错误是什么,但这应该有效:
unitOfWork.Setup(m => m.PhysicalTests).Returns((IRepository<PhysicalTest>)null);
我怀疑你试图用
Returns(null)
调用它,这会导致编译器抱怨,因为 Returns
过载并且它不知道应该调用哪个方法。转换为特定类型可以消除歧义。
rt
是方法的返回类型:FindById
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(Task.FromResult((rt)null));
Organization
是方法的返回类型:Get
mockCache
.Setup(cache => cache.Get(It.IsAny<string>(), It.IsAny<string>(),It.IsAny<string>()))
.Returns(value: null as Organization);
你可以试试这个:
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
你太接近了,你只需要像这样将返回类型作为通用类型传递
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns<IRepository<PhysicalTest>>(null);
除了按照已接受的答案将成员强制转换为 null 外,这种方法也应该有效。
unitOfWork.Setup(m => m.PhysicalTests).Returns(() => null);