对函数进行单元测试,但当我运行单元测试
时,该函数没有返回任何内容。
这是函数:
public string FindUniqueWords(Dictionary<string, int> dictionary)
{
string uniqueWord = "";
foreach (KeyValuePair<string, int> pair in dictionary) //loop through the occurenceDictionary
{
uniqueWord += (pair.Key + ", ");
}
uniqueWords.Text = uniqueWord;
return (uniqueWord);
}
这是单元测试
[TestMethod]
public void CheckUniqueWordsAreFoundTest()
{
string actual, expected;
Form1 frm1 = new Form1();
actual = frm1.FindUniqueWords(unitTestOccurenceDictionary);
expected = "hello, world, i, am, god, of, this, ";
Assert.AreEqual(expected, actual);
}
我正在将这本字典发送到该函数
public class UnitTest1
{
public Dictionary<string, int> unitTestOccurenceDictionary = new Dictionary<string, int>();
public void Add(string key, string value)
{
unitTestOccurenceDictionary.Add("hello", 1);
unitTestOccurenceDictionary.Add("world", 2);
unitTestOccurenceDictionary.Add("I", 1);
unitTestOccurenceDictionary.Add("am", 1);
unitTestOccurenceDictionary.Add("god", 1);
unitTestOccurenceDictionary.Add("of", 1);
unitTestOccurenceDictionary.Add("this", 1);
}
当我运行单元测试时,它失败并显示
actual = <>
我不确定是什么原因造成的,但我觉得这是一个愚蠢的简单错误,例如缺少引用,但当我运行代码时没有错误。
最佳答案
我认为您的问题可能只是字典不保证其项目的顺序。
尝试像这样更改 FindUniqueWords 函数,以对返回的项目强制执行订单:
string uniqueWord = "";
List<string> result = new List<string>();
foreach (var key in dictionary.Keys.OrderBy(x => x))
{
result.Add(key);
}
var uniqueWord = String.Join(", ", result);
return uniqueWord;
然后您可以更改单元测试以期望有序结果:
var expected = "am, god, hello, I, of, this, world";
测试应该开始通过。
注意:其他几个人提到您在字符串末尾也遇到了“,”问题,这促使我使用String.Join
。支持@paxdiablo、@trungtin1710 和@HariPrasad 发现这个问题。
关于c# - 函数不会返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30091348/