0

インターフェイスに渡されたパラメーターが正しいかどうかをテストしようとしています。

MailMessage expectedMailMessage = new MailMessage();

var mailerMock = new Mock<IMailSender>();
mailerMock.Setup(m => m.Send(expectedMailMessage)).Verifiable();

Mailer mailer = new Mailer(mailerMock.Object);
mailer.Send(expectedMailMessage);

mailerMock.Verify(m => m.Send(expectedMailMessage), Times.Once());

メーラークラス:

public class Mailer : IMailer
{
    private readonly IMailSender _mailSender;
    public Mailer(IMailSender mailSender)
    {
        _mailSender = mailSender;
    }

    public void Send(MailMessage mailMessage)
    {
        _mailSender.Send(mailMessage);
    }
}

しかし、それでもこれは失敗します。問題は、デバッグが非常に難しいことです。ランダムな Guid が生成されているかどうか、または日付が設定されているかどうかを確認しましたが、何も見つかりませんでした。

4

2 に答える 2

0

いくつかいじった後、私はあきらめて、これを思いつきました:

mailerMock.Verify(m => m.Send(It.Is<MailMessage>(msg => msg.Subject == expectedMailMessage.Subject));
mailerMock.Verify(m => m.Send(It.Is<MailMessage>(msg => msg.Sender == expectedMailMessage.Sender));

また、どのプロパティで失敗しているかを簡単に確認できます。

于 2012-11-12T14:16:35.760 に答える
0

mailerMockメソッドの代わりに渡しexpectedMailMessageていますSend

Mailer mailer = new Mailer(mailerMock.Object);
mailer.Send(expectedMailMessage);
于 2012-11-12T00:51:17.280 に答える