我应该明确断言计数或结果吗?

时间:2014-06-16 09:06:24

标签: c# unit-testing tdd nunit

[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);

2 个答案:

答案 0 :(得分:5)

尝试在6个月后让自己处于阅读此测试的人的位置。哪个测试可以提供更多信息?

  

收集两句话,“Hello World”和“Goodbye World”

  1. ... 简单展平返回4个单词的集合
  2. ... 简单展平返回“Hello”,“World”,“Goodbye”,“World”
  3. 哪一个告诉你更多关于方法的目的或方法的作用?从TDD的角度来看,您应该更喜欢不那么模糊的测试,在这种情况下是第二个测试。

答案 1 :(得分:1)

通常将您想要测试的方法与testCase分开是一个很好的做法,在您发布的代码片段中,逻辑的整个实现都在测试用例中,如果在实际代码中逻辑将发生变化会发生什么?测试用例必须手动更改,从而导致问题。

因此,我建议您首先将方法的逻辑与测试用例本身分开。 然后,问问自己,“我想测试什么?”,如果测试的目的是验证返回的elemenet的数量,那么你的第一个断言是好的,以防你要测试什么,重要的是什么,是返回列表的内容,然后你来测试列表的内容,因为你不能对实现做出假设(也考虑到它可能会改变)。