【问题标题】:JUnit Tests - what do i test?JUnit 测试 - 我要测试什么?
【发布时间】:2009-12-21 08:55:12
【问题描述】:

如果我有一个返回 ArrayList 的基本访问器方法

我到底要测试什么? 我在测试方面非常缺乏经验。

【问题讨论】:

  • 然后阅读一些文章并观看一些演示;)
  • 只是一个相关的评论,最好将迭代器返回到底层集合,而不是提供访问器方法来返回您的集合实例。返回迭代器会限制包含集合实例的类的可变性。
  • @sateesh - 更好:return Collections.unmodifiableList(mylist);。一些迭代器实现了delete() 方法...
  • 这个问题含糊不清。我建议你先自己做一些研究,这样你至少知道要问什么。

标签: java unit-testing junit


【解决方案1】:

这取决于您期望该方法的行为方式。例如:如果有人调用了该方法并更改了检索到的列表,您是否希望在下次调用 getter 时显示这些更改?无论哪种方式,测试该行为。当列表为空时,getter 会返回什么?空列表还是空列表?这也应该进行测试。

【讨论】:

    【解决方案2】:

    通常为访问器编写显式的 Junit 测试通常有点矫枉过正(你在测试什么?return foo;)。使用code coverage 工具(例如clover)可以帮助您首先针对最复杂的代码进行测试。

    【讨论】:

      【解决方案3】:

      给你一个有趣的问题:

      How much should a unit test "test"

      How to use Junit and Hibernate usefully

      What should not be unit tested

      编辑:

      在 Stackoverflow 上添加了一些我最喜欢的关于 JUnit 和单元测试的问题。

      【讨论】:

      • 我添加了它...因为有些人倾向于忘记 Junit 可以与许多不同的组件一起使用。对于初学者来说,这是一个很好的起点……但这只是我的 2 美分。
      【解决方案4】:

      始终牢记,测试代码也是代码,每 1000 行代码,您至少会产生 4 个错误。所以测试什么不起作用,不要为不可能破坏的东西(比如你的 IDE 生成的代码)编写测试。如果它确实坏了,写一个测试:)

      【讨论】:

        【解决方案5】:

        一般来说,单元测试应该测试你的方法是否按照它所声明的那样做。

        如果您的方法返回一个数组列表,那么您的基本测试是断言在调用它时确实返回了一个数组列表。

        测试中的下一个细节级别是检查数组列表是否正确构造?您期望的值是否已正确填写?如果它应该是一个空列表,是这样吗?

        现在您有了“晴天”案例(即该方法在正常条件下有效),您应该在适当的情况下添加一些负面(或“下雨天”)条件。如果方法接受数组的长度,如果传入负数或 int.Max 等会怎样。

        正如另一个答案中所述,这对于简单的访问器来说可能有点过头了,但这些原则适用于您需要编写的任何单元测试。

        【讨论】:

          【解决方案6】:

          取决于您的要求。你可以测试一下:

          1. 如果返回值不为空
          2. 如果返回的集合不为空
          3. 如果返回的集合是可修改/不可修改的
          4. 如果返回的集合已排序
          5. 如果返回的集合包含所有期望值
          6. 如果访问器方法没有抛出运行时异常

          但是,正如我所说,这取决于要求,取决于您在调用访问器时期望的集合“种类”。也许您允许将列表设置为null,但创建一个空列表。当您将列表设置为 null 时,测试可以确保您确实得到一个空列表。

          希望对您有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-29
            • 1970-01-01
            • 2018-03-23
            • 1970-01-01
            • 2020-10-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多