加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 测试在不发送邮件的情况下发送电子邮件的方法

发布时间:2020-12-15 23:55:17 所属栏目:百科 来源:网络整理
导读:我有一个方法 public abstract class Base{ public void MethodUnderTest();}public class ClassUnderTest : Base{ public override MethodUnderTest() { if(condition) { IMail mail = new Mail() { /* ... */ }; IMailer mailer = new Mailer() { /* ... *
我有一个方法

public abstract class Base
{
    public void MethodUnderTest();
}

public class ClassUnderTest : Base
{
    public override MethodUnderTest()
    {
        if(condition)
        {
            IMail mail = new Mail() { /* ... */ };
            IMailer mailer = new Mailer() { /* ... */ }

            mailer.Send(mail);
        }
        else
        {
            /* ... */
        }
    }
}

我有这个方法的单元测试,邮件被发送给我自己,所以它并不可怕(比没有测试更好),但我不想发送邮件.

>我遇到的问题是我不希望类中的测试特定代码(即if(testMode)返回;而不是发送邮件)
>我不太了解DI,但我考虑将模拟IMailer传递给MethodUnderTest,除了它覆盖了基类,并且没有其他派生自Base的类需要一个IMailer对象(我不想强制实现Base的实现者)在MethodUnderTest中使用不必要的IMailer)

我还可以做些什么?

(注意:IMail和IMailer是发送电子邮件的外部库的一部分.它是内部编写的,所以我可以根据需要修改它,尽管在这种情况下我看不到需要)

解决方法

使用依赖注入的标准方法是在ClassUnderTests的构造函数中要求IMailer.如果您这样做,则将模拟邮件程序传递给您的测试,并且基类不需要了解有关邮件或邮件程序的任何信息.

如果由于某种原因这是不合需要的(这通常只在您不控制基础类时才有意义),您可以使用setter injection(“属性注入”).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读