我想用它在MS测试UnitTest中伪造System.Net.Mail.SmtpClient。因此,我添加了一个System.dll的伪造组件。然后创建一个ShimsContext和一个StubSmtpClient。
using (ShimsContext.Create())
{
StubSmtpClient client = new StubSmtpClient();
}但是我该怎么处理它呢?最终目标将是编写一个测试,该测试期望使用MailMessage对象调用send方法。
发布于 2015-04-28 05:10:31
您可以创建一个接口,该接口将公开将从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);
}
}在你的测试方法中,你现在可以模拟它并使用like;
[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);
}发布于 2013-11-14 14:52:33
这并不是对你问题的真正回答,而是另一种方法:
在app.config中,将smtp设置改为deliver the mails as files to a local directory。然后,您可以加载该文件并检查assert部分中的内容。
您必须为断言编写更多的代码(或者最好创建一些帮助函数),但是您不必执行任何影响生产代码的操作。
发布于 2015-08-07 03:36:15
另一种选择是使用nDumbster
Install-Package nDumbster
它在内存中运行Smtp服务器,然后您可以对照该服务器进行验证。它将它更多地转变为集成测试,但通常这些测试比单元测试更有价值,因为您希望测试SmtpClient的使用情况也是正确的。
https://stackoverflow.com/questions/19971364
复制相似问题