通常、テストのためにクラスをモックアウトする必要があるときは、Rhino Mocksなどのライブラリを使用します。ここに私はを期待するMyService
と呼ばれるクラスがあります。私はこれらの2つのオブジェクト間の相互作用をテストするために必要な場合相互作用を確認するモック
public class MyService
{
private readonly IEmailSender sender;
public MyService(IEmailSender sender)
{
this.sender = sender;
}
public void Start()
{
this.sender.SendEmail();
}
}
、私のテストでは、このようなものになります。私はモックを生成するために、Rhinoのモックを使用しています、上記の試験では
[TestMethod]
public void Start_Test_Using_Rhino_Mocks()
{
IEmailSender emailSender = MockRepository.GenerateMock<IEmailSender>();
MyService service = new MyService(emailSender);
service.Start();
emailSender.AssertWasCalled
(
x => x.SendEmail(),
c => c.Repeat.Once()
);
}
をし、 SendEmail()
メソッドが一度呼び出されたと主張します。
しかし、私がRhino Mockを使用できず、手動のモックを作成しなければならない場合はどうすればよいですか?私は手動で作成したモックで
public class MockEmailSender : IEmailSender
{
public void SendEmail()
{
}
}
[TestMethod]
public void Start_Test_Using_Manual_Mocks()
{
MockEmailSender emailSender = new MockEmailSender();
MyService service = new MyService(emailSender);
service.Start();
// How do I test the interaction?
}
、どのように私はSendEmail()
メソッドが呼び出されたことを確認するのでしょうか?モックの方法で私の主張をSendEmail()
の方法で入れることができましたが、それはテストを見てすぐに何が起こっているのかわからないので、テストが分かりにくくなります。