2017-01-31 18 views
1

MoqでMicrosoft Visual Studio 2017の組み込みテストを使用する。Moqを使用してメソッドが値付きで呼び出されたかどうかを調べる

コンテンツを作成して通知システムに送信するシンプルなクラスがあります。通知システムが呼び出されたかどうかをテストする必要がありますが、その呼び出しにはテキストが含まれています。

public void DoStuff() 
      var tenantSettings = _tenantService.GetTenantSettings(); 
      tenantSettings.Body = "xxx SOME VALUE xxx"; 
      MyService.SendMail(tenantSettings.Body); 

SendMailに「SOME VALUE」というテキストが含まれていることをテストするにはどうすればよいですか?あなたは単にあなたのモックにVerifyメソッドを使用することができます

MyServiceMock.Setup(x=>x.SendMail(It.IsAny<string>); 

答えて

5

私はMOCKセットアップを持っている

MyServiceMock.Verify(x => x.SendMail("SOME VALUE"), Times.Once()); 

編集:

テキストとして渡されたかどうかを確認したい場合パラメータは正確には一致しませんが、テストされた値が含まれていれば、Scott Chamberlainと書いてあります:

MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once()); 
+0

渡された文字列がこのコードと一致しない '' xxx SOME VALUE xxx ''である場合、これは正確な値 '' SOME VALUE ''にのみ一致します。 –

+0

それは本当です、私は編集を見ていない、元の質問は異なっていた – tdragon

1

サブストリングを検索するにはIt.Is<TValue>(Func<TValue,bool>)関数を使用してVerify関数を使用する必要があります。

MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once()); 

この行は、DoStuff()が呼び出された後にテスト関数の最後に置かれます。

関連する問題