JUnit测试 - 我测试了什么?

问题描述:

如果我有一个基本的访问器方法返回一个ArrayListJUnit测试 - 我测试了什么?

我究竟会测试它呢? 我对测试非常缺乏经验。你

+0

然后看了一些文章和观看一些介绍;) – Bozho 2009-12-21 08:57:39

+1

只是一个相关的评论,这是更好地返回一个迭代基础集合,而不是提供存取方法来回报您的集合实例。返回迭代器限制了包含集合实例的类的可变性。 – sateesh 2009-12-21 09:34:57

+0

@sateesh - 甚至更好:'返回Collections.unmodifiableList(MYLIST);'。一些迭代器实现了一个'delete()'方法...... – 2009-12-21 10:17:00

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

Interessting问题:

How much should a unit test "test"

How to use Junit and Hibernate usefully

What should not be unit tested

编辑:

加入了一些我不喜欢的问题在这里关于#1 JUnit和单元测试。

+0

什么是Hibernate在这里? – Bozho 2009-12-21 08:58:36

+0

我加入吧...引起一些人往往忘记了Junit的可以有很多不同的组件协同工作。这对于初学者来说是一个很好的起点......但那只是我的2美分。 – bastianneu 2009-12-21 09:03:19

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

请务必记住,测试代码也是代码,对于每1,000行代码,您至少会产生4个错误。因此,测试什么不起作用,不要为不可能破坏的东西编写测试(如IDE生成的代码)。如果它确实中断了,写一个测试:)

在一般的单元测试中应该测试你的方法是否做了它应该做的事情。

如果你的方法返回一个数组列表,你的基本测试就是声明一个数组列表在被调用时确实返回。

测试中的下一级细节是检查arraylist构造是否正确?你期望它的值是否被正确填充?如果它应该是一个空的列表,是这样吗?

现在你有了你的“阳光灿烂的日子”的情况下(即该方法在正常情况下工作),如果合适的话,你应该添加一些负面(或“下雨天”)条件。如果该方法接受阵列的长度,如果你传递一个负数或int.Max等数据。

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

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

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

但是,正如我所说的,这取决于不同的要求,这取决于“之类的”,当你调用存取收集你的期望。也许你允许将列表设置为null,但创建一个空列表。测试可以确保当您将列表设置为空时,您确实会获得空列表。

希望它可以帮助给你的想法!