【问题标题】:Using Webconfig settings in Unit Tests在单元测试中使用 Webconfig 设置
【发布时间】:2014-06-16 05:39:03
【问题描述】:

我有一些与 SendGrid 服务相关的应用设置,例如用户名、密码和一些重置密码电子邮件设置。现在我想在我的单元测试中使用它们。我的 ResetPasswordSetting 类看起来像这样。

public class ResetPasswordEmailSetting : IResetPasswordEmailSetting
{
    public string ResetPasswordEmailUrl { get; set; }
    public List<string> AddToEmails { get; set; }
    public string FromEmail
    {
        get { return ConfigurationManager.AppSettings.Get("ResetPassword_FromEmail"); }
    }
    public string Subject
    {
        get { return ConfigurationManager.AppSettings.Get("ResetPassword_Subject"); }

    }
    public string SenderDisplayName
    {
        get { return ConfigurationManager.AppSettings.Get("ResetPassword_SenderDisplayName"); }
    }
}

当我使用此类运行我的单元测试时,从 Webconfig appsetting 部分获取其值的字段将变为空。

我的单元测试看起来像这样。

[TestMethod]
[TestCategory("SendGrid-Service")]
public async Task email_recieved_when_correct_email_provided()
{
    var sendgrid = new SendGridService();

    var resetpasswordsetting = new ResetPasswordEmailSetting
    {
        AddToEmails = new List<string> { "fluffyduk@gmail.com" },
        ResetPasswordEmailUrl = "www.google.com",
    };   

// when i debug then resetpasswordsetting fields are coming null other then above.                  
 var result = await sendgrid.SendResetPasswordEmail(resetpasswordsetting, new    
               SendGridSettings());

        result.Should().BeTrue();
 }

所以知道如何在单元测试中获取这些设置。

【问题讨论】:

    标签: c# asp.net unit-testing


    【解决方案1】:

    首先想到的是,在这个测试中你对设置不感兴趣,你的测试主题是来自SendGridService 类的SendResetPasswordEmail 方法。请记住,您正在实施 UNIT 测试,而不是集成测试或类似的东西。虽然单元测试您应该努力隔离任何依赖项,并且配置设置是您的类并不真正需要测试特定业务逻辑的一种依赖项。为此,您应该创建一个模拟对象,因为再次测试一个功能不需要配置设置。

    但是,如果您仍然坚持使用真正的配置文件,那么没有什么能阻止您将 app.config 文件添加到您的单元测试项目并指定您的测试所需的所有 appSettings

    【讨论】:

    • 你的意思是说我必须模拟“ResetPasswordEmailSetting”和“SendGridSettings”。
    • 嗯,这不是你必须的,因为它可以工作。但是,如果您想真正进行单元测试,那么您应该模拟它们,因为您只对SendResetPasswordEmail 感兴趣
    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 2016-11-03
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2017-10-30
    • 2020-12-23
    • 2014-09-18
    相关资源
    最近更新 更多