[Test]
public void SimpleFlatten()
{
// arrange
var sentences = new List<string> { "Hello World", "Goodbye World" };
// act
var result = sentences.SelectMany(n => n.Split(' '));
// assert
Assert.That(result.Count(), Is.EqualTo(4));
}
你认为在这里测试结果的数量是否充足?
从逻辑上考虑过这个问题,我觉得好像检查计数应该足够了,因为我没有合理的怀疑SelectMany
方法会返回正确的数字,除非方法正常工作。
我是TDD的新手但是想知道这样明确是否会更好?
CollectionAssert.AreEquivalent(
new[] { "Hello", "World", "Goodbye", "World" }, result);
答案 0 :(得分:5)
尝试在6个月后让自己处于阅读此测试的人的位置。哪个测试可以提供更多信息?
收集两句话,“Hello World”和“Goodbye World”
哪一个告诉你更多关于方法的目的或方法的作用?从TDD的角度来看,您应该更喜欢不那么模糊的测试,在这种情况下是第二个测试。
答案 1 :(得分:1)
通常将您想要测试的方法与testCase分开是一个很好的做法,在您发布的代码片段中,逻辑的整个实现都在测试用例中,如果在实际代码中逻辑将发生变化会发生什么?测试用例必须手动更改,从而导致问题。
因此,我建议您首先将方法的逻辑与测试用例本身分开。 然后,问问自己,“我想测试什么?”,如果测试的目的是验证返回的elemenet的数量,那么你的第一个断言是好的,以防你要测试什么,重要的是什么,是返回列表的内容,然后你有来测试列表的内容,因为你不能对实现做出假设(也考虑到它可能会改变)。