【问题标题】:VB.NET and NUnit - TDD [closed]VB.NET 和 NUnit - TDD [关闭]
【发布时间】:2023-04-03 06:25:02
【问题描述】:

我正在学习使用 VB.NET 和 NUnit 的 TDD。我想知道最好的做法是什么:在测试方法中使用大量 Assert 方法还是每个方法都使用一个断言?

这是我的代码。

Imports NUnit.Framework

<TestFixture()> _
Public Class CalculatorTest
<Test()> _
Public Sub TestAdd()
    Dim calculator As Calculator = New Calculator()

    Assert.AreEqual(2, calculator.sum(1, 1))
    Assert.AreNotEqual(3, calculator.sum(2, 2))
    Assert.AreEqual(-1, calculator.sum(0, -1))
        Assert.AreNotEqual(3, calculator.sum(1, 1))
    End Sub
End Class

【问题讨论】:

    标签: .net vb.net tdd nunit


    【解决方案1】:

    一种更好的思考方式是一次测试一件事。使用尽可能多的断言来测试一件事,但通常只使用一个。多个断言可能表明您一次测试多个事物,但在我看来,这不是一个硬性规定。最好的指导是,您不希望在测试中创建独立概念之间的依赖关系。

    在您的示例中,您实际上正在测试 4 件事,尽管实际上您可能只需要其中两个,因为它们涵盖了相同的领域。我建议测试当您添加两个正数、两个负数以及一个负数和一个正数以及负数和正数结果时会发生什么。然后我会考虑数学性质和测试交换性和加性恒等式(零)。最后,我会测试边界条件——正溢出和负溢出等。注意,这可能是全面的,也可能不是全面的,即,我认为我已经涵盖了基础,但我并没有努力做到详尽无遗;我只是想说明您将如何思考要编写哪些测试,是的,我将使用单个断言来进行这些单独的测试。

    对于更复杂的事情,您可能有多个断言来测试相同的“事物”——例如,您可能希望使用一组给定的输入检查一行是否正确插入到数据库中。我认为在单个测试中测试所有列是否具有适当的值是完全可以接受的,而不是单独测试每个属性。其他人可能会有所不同,但我认为在这种情况下,您不会通过测试所有属性是否具有正确的值来创建任何依赖项,因为插入是一个原子操作。

    【讨论】:

    • 一个很好的解释。谢谢!
    【解决方案2】:

    普遍接受的“最佳实践”是每次测试一个断言。 (根据罗伊·奥舍罗夫的说法)

    但是,这个特定的测试可以通过 NUnit 使用 TestCases 更简单地完成:

    <Test()> _
    <TestCase(1, 1, 2)> _
    <TestCase(1,-1, 0)> _
    <TestCase(0,-1,-1)> _
    Public Sub Calculator_Add_ReturnsExpectedResult(Integer a, Integer b, Integer expected)
        Dim calculator As Calculator = New Calculator()
    
        Assert.AreEqual(expected, calculator.sum(a, b))
    End Class
    

    还要注意我在那里使用的命名,以便准确说明测试正在测试什么。

    “每个测试一个断言”实践背后的原则是,您希望失败的测试具有非常具体的含义。也就是说,每个测试都应该告诉你一个特定的东西是否有效。

    【讨论】:

    • _ : 什么意思?谢谢。
    • 这意味着它将多次调用您的测试函数,每次都有不同的输入(如注释中指定)。在这种情况下,它将调用它 3 次,首先是 (1,1,2),然后是 (1,-1,0),最后是 (0,-1,-1)。
    • 请注意,作为单独的测试用例,像这样,每个断言都会运行并报告,无论它之前的断言是否通过。因此,如果出现任何问题,您将获得更完整的故障报告。对于一个方法中的断言,如果第一个断言失败,您将不知道其他方法的结果。
    【解决方案3】:

    Osherove 的观点带有原教旨主义的味道。例如,如果一个函数返回一个结构/类,您要么必须使用多个断言,要么创建一个自定义结构来比较断言,这实际上只是在做同样的事情。

    重要的是测试功能的作用。也许总是质疑“专家”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-30
      • 2013-11-25
      • 1970-01-01
      • 2018-09-02
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多