Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字典基类继承的单元测试类_C#_Enums_Nunit - Fatal编程技术网

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();
    }
}