Ho 对具有读取不同配置值的方法的静态类进行单元测试

问题描述 投票:0回答:1
public static class Settings
{
    public static bool IsFlagEnabled()
    {
        bool isFlag;
        bool.TryParse(ConfigurationManager.AppSettings["isFlag"], out isFlag);
        return isFlag;
    }
 }

// 单元测试

     [Fact]
    public void isFlagEnabled()
      {
        // act
        var isFlagEnabled = Settings.IsFlagEnabled();
        // assert
        Assert.True(isFlagEnabled);
    }

//单元测试总是为配置值返回 false

c# .net unit-testing web-config
1个回答
0
投票

您的单元测试实际上要测试什么?

  1. bool.TryParse 是否按预期工作?
  2. ConfigurationManager.AppSetting 是否按预期工作并加载配置文件?
  3. 实际的配置文件是否有一个可以解析为布尔值的“isFlag”值?

第一种情况你可以直接测试

bool.TryParse
,或者进行扩展
bool AsBool(this NameValueCollection self, string key) ...
以提供更方便的访问+解析。

第二种情况可能不是很有意义,因为功能是由框架提供的,但应该可以设置构建来为单元测试提供带有一些测试数据的配置文件。

在第三种情况下,您需要加载一个实际的配置文件,因此测试可能会更麻烦,但如果您可以检测到有人写了“troe”而不是“true”,也可能会提供更多价值。

请记住,单元测试应该提供。根据我的经验,对非常简单的方法或涉及大量依赖项的方法进行单元测试,往往会比具有很少依赖项的高度复杂的方法提供更低的价值。我建议反对诸如“所有方法都必须经过单元测试”之类的教条规则。

© www.soinside.com 2019 - 2024. All rights reserved.