私はWeb APIを開発していますが、私が思いついたテストの1つは、クライアントが物理テスト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)
}
Nullオブジェクトを返すには、Returns()メソッドが必要です。これは、リソースが見つからない場合に実際のAPIメソッドが返すものになります。
Returns()メソッドのパラメーターとしてnullを送信しようとしましたが、成功しませんでした。
エラーが何であるかを示すことはできませんが、これは機能するはずです。
_unitOfWork.Setup(m => m.PhysicalTests).Returns((IRepository<PhysicalTest>)null);
_
Returns
がオーバーロードされており、どのメソッドを呼び出すべきかわからないため、コンパイラが文句を言うReturns(null)
で呼び出そうとしたのではないかと思います。特定の型にキャストすると、あいまいさがなくなります。
rt
はメソッドの戻り型です:FindById
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(Task.FromResult((rt)null));