我想为我的项目中的电子邮件和 SMS 发件人编写单元测试,当然,因为它们是开放系统,我无法从头到尾测试它们的功能。所以我正在寻找一种测试它们的聪明方法。
下面是我用来发送电子邮件和短信的代码:
邮箱:
public void Send(MailMessage msg)
{
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential(emailSetting.EmailUser
, emailSetting.EmailPass);
client.Send(msg);
}
短信:
public void SendSMS( String toNumber, String message)
{
if (client != null)
client.SendSmsMessage(smsSetting.SMS_Num, toNumber, message);
}
请您参考如下方法:
问题在于,如果您真的要进行单元测试,那么您需要模拟邮件/短信客户端。
如果您想实际发送电子邮件(如果它们在一夜之间/在开发周期中运行会导致垃圾邮件),那么它们不会归类为单元测试,而是集成测试。
举个例子:
public class EmailThingy
{
private readonly IEmailClient _client;
public EmailThingy(IEmailClient client)
{
_client = client;
}
public void Send()
{
// do stuff with client
}
}
在你的单元测试中
[Test]
public void SendEmail()
{
var clientMock = MockRepository.GenerateMock<IEmailClient>();
// define behaviour for clientmock
var sut = new EmailThingy(clientMock);
sut.SendMail();
}
