【发布时间】:2016-03-13 08:18:16
【问题描述】:
比如这样一个测试:
[Test]
public void Test_With_Many_Random_Words()
{
var randomWords = new string[100];
for (var i = 0; i < 100; ++i)
randomWords[i] = GenerateRandomWord();
var trie = new PrefixTrie();
for (var i = 0; i < 100; ++i)
trie.AddWord(randomWords[i]);
Assert.AreEqual(100, trie.CountOfWords);
foreach (var word in randomWords)
Assert.IsTrue(trie.ContainsWord(word));
}
private string GenerateRandomWord()
{
var random = new Random();
var builder = new StringBuilder();
var length = 1 + (random.Next()%100);
for (var i = 0; i < length; ++i)
{
var charCode = random.Next()%26;
builder.Append((char) ('a' + charCode));
}
return builder.ToString();
}
或者用“testword1”、“alsotestword2”、“notword3”等少数已知词创建测试并检查代码是否正确会更好?
【问题讨论】:
-
你想测试什么?
-
其实我的问题没关系,但是这一次,我们可以假设我们正在测试一些数据结构(例如,在我的代码中我正在测试前缀trie)。
-
你不应该依赖随机测试。大多数时候它会错过特殊情况。但是你可以添加它们,总比没有测试好
-
Tim Rogers,是的,我自己没有找到这个话题。谢谢。
-
测试的许多最佳实践之一是拥有应该产生预期输出的已知输入。重点是已知输入。如果您的输入是随机的,它们是否已知?这似乎违反直觉,不是吗?通过您的具体示例,我可以看到这将如何有意义,但是它会再次使用相同的已知输入测试所需的功能。我相信这个问题对于这个论坛来说实际上有点太模糊了。
标签: c# unit-testing testing