我正在开发一个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()方法返回一个空对象,这将是实际API方法在未找到资源时返回的内容。
我尝试将null作为参数发送到Returns()方法,但没有成功。
Returns
有两个重载,一个接受T
(在这种情况下,T
=IRepository<PhysicalTest>
),另一个接受Func<T>
。当传递null
时,编译器不知道该使用哪一个,因此您必须明确指定。这些重载存在的目的是为了让您选择返回静态值.Returns(new T())
还是每次调用都返回新实例.Returns(() => new T())
。 - JHBonarius