我应该在什么条件下测试get()和set()方法?

时间:2010-05-27 06:23:24

标签: java unit-testing junit

我无法确认是否要进行这些测试。似乎set和get方法非常简单,例如:

setA(String A) {
    this.A = A;
} 

getA(){
    return A;
}

任何想法都将不胜感激!

谢谢, 约瑟夫

9 个答案:

答案 0 :(得分:8)

我在野外看到了很少有吸气剂和固定器的问题,只有其中一个可以通过单元测试检测到,只有当所有吸气剂和固定剂都在一起进行测试时,而不是通过个人测试方法。

考虑从两对不同的getter / setter中重用相同字段的复制/粘贴错误。即,

public void setA(Object a) {
  this.a = a;
}
public Object getA() {
  return a;
}

public void setB(Object a) {
  this.a = a;
}
public Object getB() {
  return a;
}

一次关注一个setter / getter对的单元测试不会暴露问题。

现代IDE将根据请求生成getter和setter,因此这个错误不大可能,但不是每个人都使用现代IDE。 (vi用户创建了上面的错误。)如果这些方法驻留在一个简单的数据持有者对象中,问题可能只会显示在远离原因的位置。

出于这个原因,如果我测试getter和setter(我经常不这样做),那么它来自一个测试方法,它首先使用不同的值调用所有setter,然后在所有getter上进行断言。 / p>

然而,你必须面对的一个问题是,当其他人得到代码并决定时,无法保证以“简单”的getter或setter开始生活的方法将保持这种状态,比方说,吸气剂是一个好的地方做一些涉及副作用的事情。

答案 1 :(得分:4)

一般规则:为getter和setter编写测试没什么意义。只有他们有一些额外的逻辑,即。不是纯粹的访问者,你应该编写测试。

答案 2 :(得分:2)

我唯一一次专门为set()和get()方法编写测试,就是它们内部存在某种逻辑。例如。将整数限制在1到8之间


public void SetA(int a)
{
  if(a > 8 || a < 1)
  {
    throw new IndexOutOfBoundsException();
  }

  this.a = a;
}

即使上面的代码是一个非常简单的例子,当你使用这种类型的逻辑时,对它们运行测试也是一个好主意。主要用于当您的业务规则发生变化时,您必须将其限制在9到1之间:)

答案 3 :(得分:1)

进行成本/收益分析

会有什么收获

  • 知道私有变量确实可以读/写

费用是多少

  • 编写测试用例所需的时间

  • 每次执行测试套件时花费的时间


如果你知道没有可观察到的副作用调用吸气剂或二传手,我就不会打扰了。

答案 4 :(得分:1)

是的,在你的情况下,它们是微不足道的 - 但另一方面 - 两个简单的测试完全依赖于质量指标; - )

我会创建测试。您的应用程序实际上依赖于方法实际存储/访问字段值的行为,并且不会更改任何内容。

也许,有一天有人决定更改字段类型或将一些单位转换代码添加到setter / getter中 - 测试将显示,如果代码仍然有效或者显示,则需要更多工作。

答案 5 :(得分:1)

聪明人曾经说过“直到恐惧变成无聊才进行测试”。如果您不再担心超简单代码会破坏,请不要编写测试,除非您不厌倦编写这些测试。并且不要只是为了“改善你的指标”来编写测试,而这只是游戏系统。编写测试以确保您的代码有效,提高稳健性,并建立您可以自由重构的信心。

答案 6 :(得分:0)

它们都是一样的,我说像空白接口或业务类。预处理应该启用所有需要的或者它们是其他类型(两者都应该返回,如响应并采取2个变量)语言(即使POSIX退出,现在无效应该使用参数,因为知道方式非常重要)

答案 7 :(得分:0)

为不能失败的方法编写测试用例似乎与我不成比例。 仅当A的值由配置或可能失败的东西初始化时 值得测试。

编辑: 如果帐户余额变为负数并且您想在调用方法withdraw()之后检查标志是否设置正确,则测试有意义的另一个示例可能是标记“透支”。

答案 8 :(得分:0)

单元测试应该是系统应该如何工作的文档。虽然人们经常跳过属性的单元测试,因为功能很简单, 如果测试是文档,特别是如果其他人要进行实现,那么应该编写属性测试。 也就是说,当我同时编写测试并执行实现时,我通常会跳过为属性编写测试,除非他们做的不仅仅是简单的获取/设置或者我有空闲时间,这是一件罕见的事情。