Java JUnit测试-我应该测试什么?

Java JUnit测试-我应该测试什么?,java,unit-testing,junit,Java,Unit Testing,Junit,如果我有一个返回ArrayList 我到底要测试什么呢? 在测试方面,我非常缺乏经验。对你们来说,一个有趣的问题是: 编辑: 在Stackoverflow上添加了一些我最喜欢的关于JUnit和单元测试的问题。您感兴趣的问题: 编辑: 在Stackoverflow上添加了一些我最喜欢的关于JUnit和单元测试的问题。这取决于您对该方法的期望。例如:如果有人调用了该方法并更改了检索到的列表,您希望这些更改在下次调用getter时显示出来吗?不管怎样,都要测试一下这种行为。当列表为空时,g

如果我有一个返回
ArrayList

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

对你们来说,一个有趣的问题是:

编辑:


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

您感兴趣的问题:

编辑:


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

这取决于您对该方法的期望。例如:如果有人调用了该方法并更改了检索到的列表,您希望这些更改在下次调用getter时显示出来吗?不管怎样,都要测试一下这种行为。当列表为空时,getter返回什么?空列表还是空列表?这也应该进行测试。

这取决于您对该方法的预期行为。例如:如果有人调用了该方法并更改了检索到的列表,您希望这些更改在下次调用getter时显示出来吗?不管怎样,都要测试一下这种行为。当列表为空时,getter返回什么?空列表还是空列表?这也应该进行测试。

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

通常为访问器编写显式Junit测试有点过火(您在测试什么?return foo;)。使用诸如之类的工具可以帮助您首先将测试工作瞄准最复杂的代码。

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

请始终记住,测试代码也是代码,并且每1000行代码至少会产生4个bug。所以,测试不起作用的东西,不要为不可能破坏的东西(比如IDE生成的代码)编写测试。如果它确实中断了,那么编写一个测试:)

在一般情况下,单元测试应该测试您的方法是否完成了它声明的任务

如果您的方法返回arraylist,那么您的基本测试是断言在调用arraylist时确实返回了arraylist

测试中的下一个详细级别是检查arraylist的构造是否正确?您希望在其中填写的值是否正确?如果它应该是一个空列表,是这样吗

现在你有了“晴天”的情况(即该方法在正常条件下工作),如果合适,你应该添加一些负面(或“雨天”)条件。如果该方法接受数组的长度,那么如果传入负数或int.Max等怎么办


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

一般来说,单元测试应该测试您的方法是否完成了它声明的功能

如果您的方法返回arraylist,那么您的基本测试是断言在调用arraylist时确实返回了arraylist

测试中的下一个详细级别是检查arraylist的构造是否正确?您希望在其中填写的值是否正确?如果它应该是一个空列表,是这样吗

现在你有了“晴天”的情况(即该方法在正常条件下工作),如果合适,你应该添加一些负面(或“雨天”)条件。如果该方法接受数组的长度,那么如果传入负数或int.Max等怎么办


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

取决于您的需求。您可以测试:

  • 如果返回值不为空
  • 如果返回的集合不为空
  • 如果返回的集合可修改/不可修改
  • 如果返回的集合已排序
  • 如果返回的集合包含所有预期值
  • 如果访问器方法未引发运行时异常
  • 但是,正如我所说的,这取决于需求,取决于调用访问器时所期望的收集类型。也许您允许将列表设置为
    null
    ,但创建一个空列表。当您将列表设置为null时,测试可以确保您确实得到一个空列表


    希望它能给你一个想法

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

  • 如果返回值不为空
  • 如果返回的集合不为空
  • 如果返回的集合可修改/不可修改
  • 如果返回的集合已排序
  • 如果返回的集合包含所有预期值
  • 如果访问器方法未引发运行时异常
  • 但是,正如我所说的,这取决于需求,取决于调用访问器时所期望的收集类型。也许您允许将列表设置为
    null
    ,但创建一个空列表。当您将列表设置为null时,测试可以确保您确实得到一个空列表


    希望它能给你一个想法

    然后阅读一些文章并观看一些演示文稿;)只是一个相关的注释,最好向基础集合返回迭代器,而不是提供访问器方法来返回集合实例。返回迭代器会限制包含集合实例的类的可变性。@sateesh-更好的是:
    返回集合。不可修改列表(mylist)。有些迭代器实现了一个
    delete()
    方法……这个问题很模糊。我建议你先自己做一些调查,这样你至少知道该问什么