c# - 测试我是否可以迭代字典并将键和值写入控制台

标签 c# dictionary tdd nunit console.writeline

我正在尝试使用 TDD 用 C#(我对此非常陌生)编写一个控制台应用程序。

我试图迭代一个包含字符串作为键和整数作为值的字典,并将它们作为“key: value”输出到控制台。我尝试了很多不同的方法,最后找到了一些可能有效的方法:

    public void ShowContents ()
    {
        foreach (KeyValuePair<string, int> item in dictionary) {
            Console.WriteLine ("{0}: {1}", item.Key, item.Value);
        }
    }

我遇到的问题是 - 我不知道如何测试它。我的测试目前如下所示:

[Test ()]
    public void CanShowContentsOfDictionary ()
    {
        dictionary.AddWord ("Hello");
        Assert.AreEqual ("Hello: 1", dictionary.ShowContents ());
    }

并且显然期望返回值而不是输出到控制台的内容。我在此处的其他地方读到,对 Console.WriteLine 进行测试没有意义,因为您只是假设它有效,因此您可以在此方法中使用 return ,然后编写另一个仅写入控制台的方法(因此不需要进行测试)。问题在于:a)我不知道如何编写一个返回所有键和值的方法; b) 我不是返回一件东西,而是返回一些不同的字符串。

关于我如何解决这个问题有什么建议吗?

最佳答案

您可以编写一个函数来返回由 ShowContents 输出的整个字符串;像这样:

public string GetContents()
{
    var sb = new StringBuilder();        
    foreach (KeyValuePair<string, int> item in dictionary) {
        sb.AppendLine(string.Format("{0}: {1}", item.Key, item.Value));
    }
    return sb.ToString();
}

那么你的ShowContents就是:

Console.Write(GetContents());

您可以测试 GetContents 返回您期望的内容,而无需涉及 Console.WriteLine

关于c# - 测试我是否可以迭代字典并将键和值写入控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29335529/

相关文章:

c# - 文本框后面的标签

string - 理解 Scala 中的 String 和 map 方法

objective-c - 使用 UIAutomation 设置测试数据

javascript - 无法在 React 组件中测试提交处理程序

javascript - 如何更新实体显示名称

c# - 在 Visual Studio 中将应用程序移动到另一台计算机时复制数据库文件

c# - 将用户控件添加到 winform 时出错

dictionary - 删除 map 中的键

python - 构建字典而不加载所有文本

asp.net-mvc-3 - 测试 RazorViewEngine View 的输出