【发布时间】:2019-10-23 10:15:08
【问题描述】:
我正在尝试为我的 CutomSmtpMailer 编写单元测试代码。我的 CutomSmtpMailer 继承自 SmtpClient。
这是我的班级的样子:
public class CutomSmtpMailer : SmtpClient
{
private void SendMail(MailMessage mailMessage)
{
//DoSomeStuff
Send(mailMessage); //base.Send(mailMessage)
}
}
我想在不发送邮件的情况下测试我的自定义代码:我想通过将其替换为空操作来避免调用“Send(mailMessage)”,但不知道它是否已被调用 .当我使用 DI 时,我知道如何模拟实例,但我不想注入 SMTPclient(事实上,我这里有很多继承的情况是一个简单的例子)
public class TestCutomSmtpMailer
{
public CutomSmtpMailer Get()
{
return new CutomSmtpMailer();
}
[Fact]
public void SendMail()
{
CutomSmtpMailer service = Get();
MailMessage mailMessage = new MailMessage();
// Find on web but not available :(
Mock.Arrange(() => new SmtpClient().Send()).Returns(null).IgnoreInstance();
service.SendMail(mailMessage);
}
}
如何用空函数替换/模拟Parent类方法以避免发送邮件?
提前致谢
【问题讨论】:
-
你不能。这就是为什么人们会注入
SmtpClient。 -
这感觉就像XY problem。您选择继承
SmtpClient的任何特殊原因? -
另外,昨天以duplicate 关闭,您将整个内容复制并粘贴到一个新问题中。不建议这样做。让我们看看我们是否可以充分改变这个问题以揭示实际问题并避免重复
-
赞成您的问题,因为它非常清楚您想要做什么以及想要避免什么(依赖注入)。对我来说,这看起来不像是重复的,这与与the first question重复链接的情况截然不同。
标签: c# unit-testing inheritance parent-child xunit.net