use*_*970 13 c# mstest microsoft-fakes
我想用它来伪造System.Net.Mail.SmtpClientMS-Test UnitTest.因此我添加了一个Fizz Assembmly of System.dll.然后我创建一个ShimsContext和一个StubSmtpClient.
using (ShimsContext.Create())
{
StubSmtpClient client = new StubSmtpClient();
}
Run Code Online (Sandbox Code Playgroud)
但是我该怎么做呢?最终目标是编写一个Test,它期望使用对象调用send方法MailMessage.
Teo*_*ahi 28
您可以创建一个接口,该接口将公开将从SmtpClient使用的函数
public interface ISmtpClient
{
void Send(MailMessage mailMessage);
}
Run Code Online (Sandbox Code Playgroud)
然后创建您的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);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的测试方法中,您现在可以模拟它并使用类似;
[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);
}
Run Code Online (Sandbox Code Playgroud)
这不是你问题的真正答案,而是另一种方法:
在app.config中,设置smtp设置以将邮件作为文件传送到本地目录.然后,您可以加载该文件并检查断言部分中的内容.
您将不得不为断言编写更多代码(或者最好创建一些辅助函数),但您不必执行任何影响生产代码的操作.
| 归档时间: |
|
| 查看次数: |
12425 次 |
| 最近记录: |