gpt4 book ai didi

c# - 如何在单元测试中模拟/伪造 SmtpClient?

转载 作者:可可西里 更新时间:2023-11-01 08:01:09 25 4
gpt4 key购买 nike

我想用它在 MS-Test 单元测试中伪造 System.Net.Mail.SmtpClient。为此,我添加了一个 System.dll 的 Fakes Assembmly。然后我创建一个 ShimsContext 和一个 StubSmtpClient

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

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

最佳答案

您可以创建一个接口(interface),该接口(interface)将公开将从 SmtpClient 使用的函数

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

然后创建您的具体类,它将完成真正的工作。

 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);
}
}

现在在你的测试方法中你可以模拟它并像使用一样;

[TestMethod()]
public void SendTest()
{
Mock<ISmtpClient> smtpClient = new Mock<ISmtpClient>();
SmtpProvider smtpProvider = new SmtpProvider(smtpClient.Object);
string @from = "from@from.com";
string to = "to@to.com";
bool send = smtpProvider.Send(@from, to);
Assert.IsTrue(send);
}

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com