私はMVC3アプリケーションを持っており、AccountControllerにActionMethodを登録しています。ユーザーが登録すると、ユーザーの詳細を電子メールで送信します。 Postal(初めて)を使用していて、Sendメソッドが呼び出され、Register emailテンプレートが呼び出されたことを確認する単体テストを実行します。ここでMoqを使用してこのメソッドの出力を確認するには
は、電子メールtempalteを呼び出して、私の登録ActionMethod内のコードのセクションです:
dynamic email = new Email("Register");
email.To = model.Email;
_emailService.Send(email);
_emailServiceはタイプIEmailServiceです。私はMoqを使用していますが、メソッドが呼び出されたことを確認する方法を知っていますが、このインスタンスではSendにEmailオブジェクトを渡しています。だから私はモックを作成するかどうか、またはレジスタコントローラで使用されるEmailオブジェクトが私がテストすべきものかどうかわかりません。また、電子メールの出力をテストするか、少なくともViews/Emailsフォルダの「登録」テンプレートが呼び出されているかどうかを確認するための最良の方法についてはわかりません。
[TestMethod]
public void register_post_success_sends_email_with_account_details()
{
// Arrange
// fakeMembers contains a List<Member> repository of 5 fake Members which I
// use to ensure the Register completes and then steps into the code
// that calls the email code authentication code
FakeMembers fakeMembers = new FakeMembers();
_mockMemberRepository.Setup(x => x.GetMembers()).Returns(fakeMembers.Members);
_mockEmailService.Setup(e => e.Send(?? what do I place here??));
// set up of emailService.Send is a void method so do I just not use Returns?
//// Arrange
Member model = new Member()
{
Email = "[email protected]",
Password = "test123",
ConfirmPassword = "test123"
};
Mock<Email> mockEmail = new Mock<Email>();
// Act
var result = _controller.Register(model);
// Assert
// Do I use a mockEmail.Object here? I want to test the Email called on the
// Register ActionMethod?
// Test Send method was called ONCE
_mockEmailService.Verify(e => e.Send(mockEmail.Object), Times.Once());
//Test either the output of the Email that was sent OR check that it was the
//Register email template that was called
}
私は、私は十分に簡潔してきたと誰かが