我想用它来伪造MS-Test UnitTest中的System.Net.Mail.SmtpClient。为此,我添加了System.dll的假冒组件。然后,我创建一个ShimsContextStubSmtpClient

using (ShimsContext.Create())
{
   StubSmtpClient client = new StubSmtpClient();
}

但是我该怎么办呢?
最终目标是编写一个Test,期望使用MailMessage对象调用send方法。

最佳答案

您可以创建一个接口(interface),该接口(interface)将公开将在SmtpClient中使用的功能

public interface ISmtpClient
    {
        void Send(MailMessage mailMessage);
    }

然后创建您的Concrete类,它将完成实际工作。
 public class SmtpClientWrapper : ISmtpClient
    {
        public SmtpClient SmtpClient { get; set; }
        public SmtpClientWrapper(string host, int port)
        {
            SmtpClient = new SmtpClient(host, port);
        }
        public void Send(MailMessage mailMessage)
        {
            SmtpClient.Send(mailMessage);
        }
    }

现在,您可以在测试方法中模拟它并使用like;
[TestMethod()]
        public void SendTest()
        {
            Mock<ISmtpClient> smtpClient = new Mock<ISmtpClient>();
            SmtpProvider smtpProvider = new SmtpProvider(smtpClient.Object);
            string @from = "[email protected]";
            string to = "[email protected]";
            bool send = smtpProvider.Send(@from, to);
            Assert.IsTrue(send);
        }

关于c# - 如何在UnitTest中模拟/伪造SmtpClient?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19971364/

10-10 07:59