【问题标题】:Unit testing Smtpclient mock Send method单元测试 Smtpclient 模拟发送方法
【发布时间】:2021-02-10 19:43:31
【问题描述】:

有没有办法模拟Send(System.Net.Mail.MailMessage message) 方法在调用时什么都不做? 我正在使用 2 个参数构造函数创建 SmtpClient 并发送类似

的消息
using(var client = new SmtpClient(host, port)){
client.Send(message);
}

我真的不需要测试它,只是想跳过它并继续前进。 对于测试,我使用的是 XUnit 和 Moq。

【问题讨论】:

  • 紧密耦合使得单独测试此代码变得困难。考虑使用 SOLID 原则解耦您的代码。

标签: c# .net unit-testing mocking moq


【解决方案1】:

看起来您需要实现任何实现相同方法的包装器。
例如:

public interface ISmtpClientWrapper
{
    void Send(MailMessage message);
}

public class SmtpClientWrapper : ISmtpClientWrapper
{
    private readonly SmtpClient _smtpClient;
    public SmtpClientWrapper()
    {
        _smtpClient = new SmtpClient("xxx", 25);
    }

    public void Send(MailMessage message)
    {
        _smtpClient.Send(message);
    }
}

然后将它作为参数传递给主类的构造函数。

在这种情况下,您可以使用任何您想要的模拟框架。

【讨论】:

  • SmtpClient 应该被释放,因此 ISmtpClientWrapper 应该继承 IDisposable
  • 是的。但这只是示例。
猜你喜欢
  • 2014-04-16
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多