にICreateService
依存するクラスがありITicketApiAdapter
ます。匿名の作成サービスを作成するときに挿入されるように、モックの ITicketAdaper を登録しようとしました。
したがって、セットアップでは、チケットアダプター用に次のレジスタを用意しています。
Fixture.Register(() =>
{
var ticketApiAdapter = new Mock<ITicketApiAdapter>();
ticketApiAdapter
.Setup( x => x.AddTicketComment(
It.IsAny<User>(),
It.IsAny<Customer>(),
It.IsAny<TicketComment>()))
.Returns(new SaveResult
{
Success = true,
Id = Fixture.CreateAnonymous<Guid>().ToString()
});
return ticketApiAdapter;
});
Fixture.Register(() => new CreateService(Fixture.CreateAnonymous<Mock<ITicketApiAdapter>>().Object));
ICreateService
私の理解では、これはとの両方を「フリーズ」する必要があるMock<ITicketApiAdapter>
ため、匿名インスタンスを要求すると、それが登録したインスタンスになります。
次のようなテストがあります。
[TestMethod]
public void CreateServiceCallsAddTicketComment()
{
var apiTicketAdapter = Fixture.CreateAnonymous<Mock<ITicketApiAdapter>>();
var createTicketRequest = Fixture.CreateAnonymous<CreateTicketComment>();
var createService = Fixture.CreateAnonymous<CreateService>();
var results = createService.CreateTicketComment(createTicketRequest);
apiTicketAdapter
.Verify(x => x.AddTicketComment(
It.IsAny<User>(),
It.IsAny<Customer>(),
It.IsAny<TicketComment>()),
Times.Once());
Assert.IsTrue(results.All(x => x.Success));
Assert.IsTrue(results.All(x => x.Errors.Count == 0));
}
メソッドが呼び出されたことを確認できるように、登録したのは apiTicketAdapter であることを期待しています。ステップスルーすると、TicketApiAdapter が呼び出されますが、Moq は呼び出されなかったと言っています。
編集
これは私が得るエラーです:
CreateServiceCallsAddTicketComment が例外をスローしました: Moq.MockException: モックでの呼び出しが 1 回期待されましたが、0 回でした: x => x.AddTicketComment(It.IsAny(), It.IsAny(), It.IsAny())
構成されたセットアップ: x => x.AddTicketComment(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never 呼び出しは実行されませんでした。