Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该在什么条件下测试get()和set()方法?_Java_Unit Testing_Junit - Fatal编程技术网

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

Java 我应该在什么条件下测试get()和set()方法?,java,unit-testing,junit,Java,Unit Testing,Junit,我无法确定是否要做这些测试。似乎set-and-get方法非常简单,例如: setA(String A) { this.A = A; } getA(){ return A; } 任何想法都将不胜感激 谢谢, Joseph我说,它们都是一样的,就像空白接口或业务类一样。预处理应该启用所有需要的或它们是其他类型的(两者都应该像respond一样返回并接受2个变量的实践者)语言(即使现在无效的POSIX出口也应该使用参数,因为知道方法非常重要)进行成本/收益分析 它会得到什么

我无法确定是否要做这些测试。似乎set-and-get方法非常简单,例如:

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

getA(){
    return A;
}
任何想法都将不胜感激

谢谢,
Joseph

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

进行成本/收益分析

它会得到什么

  • 知道私有变量确实被读取/写入
要多少钱

  • 编写测试用例所花费的时间

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



如果你知道调用getter或setter没有明显的副作用,我就不麻烦了。

为不会失败的方法编写测试用例对我来说似乎不成比例。 仅当A的值通过配置或某些可能失败的内容初始化时 这是值得测试的

编辑:
另一个测试有意义的例子是,如果帐户余额为负数,并且您希望在调用方法draw()后检查该标志是否设置正确,则标志“overdrawn”(透支)

一般规则:为getter和setter编写测试没有多大意义。只有当它们有一些额外的逻辑,即不是纯粹的访问器时,您才应该编写测试。

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

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


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

我在野外只看到了一些getter和setter的问题,其中只有一个可以通过单元测试检测到,只有这样,所有的getter和setter才能一起测试,而不是通过单独的测试方法

考虑从两个不同的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用户创建了上面的bug。)如果这些方法驻留在一个简单的dataholder对象中,那么问题可能只会稍微远离原因

出于这个原因,如果我测试getter和setter(我通常不测试),它来自一个测试方法,该方法首先使用不同的值调用所有setter,然后在所有getter上断言


但是,您必须面对的一个问题是,当其他人获得代码并决定(比如)时,无法保证一个以“简单”getter或setter开始生命的方法会保持这种状态,getter是一个很好的地方,它可以做一些涉及到副作用的事情。

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


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

  this.a = a;
}

公共无效SetA(INTA)
{
如果(a>8 | | a<1)
{
抛出新的IndexOutOfBoundsException();
}
这个a=a;
}

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

单元测试应该是系统如何工作的文档。尽管人们经常跳过属性的单元测试,因为功能微不足道, 如果测试是文档,特别是如果其他人要执行,那么应该编写属性测试。
这就是说,当我编写测试和执行实现时,我通常会跳过为属性编写测试,除非它们做的不仅仅是简单的get/set,或者如果我有空闲时间,这是一件罕见的事情。

一个聪明人曾经说过“测试直到恐惧变成无聊”。如果您不再担心超级简单的代码会被破坏,那么不要编写测试,除非您不厌倦编写这些测试。不要仅仅为了“改进你的指标”而编写测试,那只是在游戏系统。编写测试以确保您的代码正常工作,提高健壮性,并创建您可以自由重构的信心。

如果它们不是纯粹的访问器,那么将它们作为getter和setter(imho)可能会产生误导。让getter和setter做任何事情都是不允许的,但是设置私有变量并不是真正意义上的封装形式-您还可以使用公共字段@史蒂文:这条线很模糊。在某些情况下,副作用的程度会导致“accessoor”不是一个准确的术语。例如,当属性的设置必须触发事件时,setter需要执行其他操作。当然,这个案例应该包含测试。我认为这个属性无论如何都会在其他测试案例中使用。如果没有,它就不应该存在。bean的一个实际折衷方案是:一个覆盖所有“琐碎”getter和setter的测试。但是公共方法是类的接口,因此应该经过测试和可靠。