Skip to main content
 首页 » 编程设计

c#之在 C# 中为电子邮件或 SMS 发件人等开放系统编写单元测试

2024年02月20日34haluo1

我想为我的项目中的电子邮件和 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(); 
    }