1. ホーム
  2. c#

[解決済み] moqオブジェクト ReturnsメソッドはNULLオブジェクトを返すべき

2023-05-27 18:37:21

質問

私は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)
}

Returns()メソッドがnullオブジェクトを返す必要があります。これは、リソースが見つからない場合に実際のAPIメソッドが返すことになるものです。

Returns()メソッドのパラメータとしてnullを送信しようとしましたが、成功しませんでした。

どのように解決するのですか?

エラーが何であったかが示されていませんが、これでうまくいくはずです。

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

で呼び出そうとしたのではないでしょうか? Returns(null) で呼び出そうとすると、コンパイラが文句を言う。 Returns はオーバーロードされており,どのメソッドが呼ばれるべきかがわからないため,コンパイラが文句を言うことになる。 特定の型にキャストすることで、曖昧さが解消されます。