我想用它来伪造MS-Test UnitTest中的System.Net.Mail.SmtpClient
。为此,我添加了System.dll的假冒组件。然后,我创建一个ShimsContext
和StubSmtpClient
。
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/