C# 我应该显式地断言计数还是结果?

C# 我应该显式地断言计数还是结果?,c#,unit-testing,tdd,nunit,C#,Unit Testing,Tdd,Nunit,通常,将要测试的方法与testCase分离是一个很好的实践,在您发布的代码片段中,逻辑的整个实现都在测试用例中,如果在实际代码中逻辑发生变化,会发生什么?测试用例必须手动更改,从而导致问题 因此,我建议您首先将方法的逻辑与测试用例本身分开。 然后,问问你自己,“我想测试的是什么?”,如果测试的目的是验证返回的Elemenet的数量,那么你的第一个断言是可以的,如果你想测试的,而且重要的是,是返回列表的内容,那么你必须测试列表的内容,因为你不能对实现做出假设(同时也考虑到它可能会改变)。试着把自己

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

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

试着把自己放在6个月后阅读此测试的人的位置上。哪项测试包含更多信息

给出两个句子的集合,“你好世界”和“再见世界”

  • …简单展平返回4个单词的集合
  • …简单展平返回“你好”、“世界”、“再见”、“世界”

  • 哪一个告诉你更多关于方法的目的或方法的作用?从TDD的角度来看,您应该选择不太含糊的测试,在本例中,这是第二个测试。

    您希望在这个unitTest中测试什么?这是一种基于观点的测试,但我认为这取决于您希望测试的彻底程度。我对这些事情有点吹毛求疵,所以我自己可能会选择第二个选项。+1代表TDD的立场,要求减少不明确的测试@CasterTroy请记住,在TDD中,测试构成了代码的规范。也就是说,假设您丢失了应用程序的源代码,但没有丢失测试;您应该能够通过测试重新创建应用程序。有点离题,但更像是:在TDD中,您的测试证明了您从未写下的规范。
    [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));
    }
    
    CollectionAssert.AreEquivalent(
        new[] { "Hello", "World", "Goodbye", "World" }, result);