C# 从字典基类继承的单元测试类
我有以下代码:C# 从字典基类继承的单元测试类,c#,enums,nunit,C#,Enums,Nunit,我有以下代码: public class DiagnosticsSettings : Dictionary<string, string> { public string GetStringValue(string settingName) { return TryGetValue(settingName, out var result) ? result : throw new UnknownDiagnosticSet
public class DiagnosticsSettings : Dictionary<string, string>
{
public string GetStringValue(string settingName)
{
return TryGetValue(settingName, out var result) ? result : throw new UnknownDiagnosticSettingException($"Unable to locate setting with name {settingName}.");
}
public T GetEnumValue<T>(string settingName)
{
var stringValue = GetStringValue(settingName);
if (string.IsNullOrWhiteSpace(stringValue))
throw new UnknownDiagnosticSettingException($"Unable to locate setting with name { settingName }");
return (T)Enum.Parse(typeof(T), stringValue);
}
但是,我不断收到错误:“今天无法找到名为的设置”
我是否需要将设置传递到单元测试以使其通过
非常感谢您的指导,谢谢您没有在字典中添加任何
KeyVlauePair
s,因此GetStringValue
将始终为空
请参见此示例,该示例应适用于:
[Test]
public void Test()
{
var settings = new DiagnosticsSettings { ["Today"] = "SomeValue" };
var value = settings.GetEnumValue<CreatedOn>(CreatedOn.Today.ToString());
Assert.AreEqual(1, value);
}
这只会暴露出想要的行为
如果要保留字典初始化器,还需要实现IEnumerable
和Add(string,string)
:
您没有将任何
KeyVlauePair
s添加到字典中,因此GetStringValue
将始终为空
请参见此示例,该示例应适用于:
[Test]
public void Test()
{
var settings = new DiagnosticsSettings { ["Today"] = "SomeValue" };
var value = settings.GetEnumValue<CreatedOn>(CreatedOn.Today.ToString());
Assert.AreEqual(1, value);
}
这只会暴露出想要的行为
如果要保留字典初始化器,还需要实现IEnumerable
和Add(string,string)
:
你没有向
字典添加任何内容,因此对TryGetValue
的任何调用都会失败。谢谢@DavidG-我该怎么做?好吧,把它添加到字典中……你没有向字典添加任何内容,所以对TryGetValue
的任何调用都会失败。谢谢@DavidG-我该怎么做?好吧,将它添加到字典中。。。
[Test]
public void Test()
{
var settings = new DiagnosticsSettings { ["Today"] = "SomeValue" };
var value = settings.GetEnumValue<CreatedOn>(CreatedOn.Today.ToString());
Assert.AreEqual(1, value);
}
public class DiagnosticsSettings
{
private Dictionary<string, string> _dict = new Dictionary<string, string>();
public string GetStringValue(string settingName)
{
return _dict.TryGetValue(settingName, out var result) ? result : throw new UnknownDiagnosticSettingException($"Unable to locate setting with name {settingName}.");
}
public T GetEnumValue<T>(string settingName)
{
var stringValue = GetStringValue(settingName);
if (string.IsNullOrWhiteSpace(stringValue))
throw new UnknownDiagnosticSettingException($"Unable to locate setting with name { settingName }");
return (T)Enum.Parse(typeof(T), stringValue);
}
}
public class DiagnosticsSettings : IEnumerable
{
// ...
public void Add(string arg1, string arg2)
{
_dict.Add(arg1, arg2);
}
IEnumerator IEnumerable.GetEnumerator()
{
return _dict.GetEnumerator();
}
}