現在、コードを使用した次のメソッドがあります。
public bool SendMail(ref MailData data)
SmtpClient smtpClient = this.smtpClient;
Console.WriteLine("SMTP CLIENT: " + smtpClient.ToString());
Console.WriteLine("SMTP PORT: " + smtpClient.Port);
Console.WriteLine("SMTP HOST: " + smtpClient.Host);
}
次のテストコードで呼び出します。
public class MockSmtpClient : SmtpClient {
public virtual void Send(MailMessage mailMessage) {
}
public virtual string Host
{
get
{
return Host;
}
}
public virtual int Port
{
get
{
return Port;
}
}
}
... (actual testcode:) ...
MailData mailData = new MailData {
HostAddress = "mydomain.com",
};
var mockSmtpClient = A.Fake<MockSmtpClient>();
var mailerMock = new Mailer();
// Setup
It.IsAny<SmtpDeliveryMethod>())).Returns(mockSmtpClient.Object);
A.CallTo(() => mockSmtpClient.Host).Returns(mailData.HostAddress);
A.CallTo(() => mockSmtpClient.Port).Returns(22);
// Act
mailerMock.smtpClient = mockSmtpClient;
mailerMock.SendMail(ref mailData);
Console.WriteLine("MOCK SMTP CLIENT FROM TEST: " + mockSmtpClient);
Console.WriteLine("SMTP HOST FROM UT: " + mockSmtpClient.Host);
Console.WriteLine("SMTP PORT FROM UT: " + mockSmtpClient.Port);
実際のコードでモック オブジェクトのホストとポートを呼び出すと、\
SMTP CLIENT: Faked ServiCommTests.MockSmtpClient
SMTP PORT: 25
SMTP HOST:
ただし、テスト コードからモックのプロパティを呼び出すと、正しいスタブ プロパティが返されます。
MOCK SMTP CLIENT FROM TEST: Faked ServiCommTests.MockSmtpClient
SMTP HOST FROM UT: mydomain.com
SMTP PORT FROM UT: 22
ご覧のとおり、実際のコードではホストもデフォルト ポートも返されませんが、テストコードではモック フレームワークから正しいスタブ プロパティが返されますが、オブジェクトは両方の環境で同じです。
(例のように) FakeItEasy の代わりにモッキング フレームワーク Moq を使用した場合もまったく同じです。
前もって感謝します。