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
您的单元测试实际上要测试什么?
第一种情况你可以直接测试
bool.TryParse
,或者进行扩展bool AsBool(this NameValueCollection self, string key) ...
以提供更方便的访问+解析。
第二种情况可能不是很有意义,因为功能是由框架提供的,但应该可以设置构建来为单元测试提供带有一些测试数据的配置文件。
在第三种情况下,您需要加载一个实际的配置文件,因此测试可能会更麻烦,但如果您可以检测到有人写了“troe”而不是“true”,也可能会提供更多价值。
请记住,单元测试应该提供值。根据我的经验,对非常简单的方法或涉及大量依赖项的方法进行单元测试,往往会比具有很少依赖项的高度复杂的方法提供更低的价值。我建议反对诸如“所有方法都必须经过单元测试”之类的教条规则。