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

标签 java unit-testing junit

我无法确认是否要做这些测试。看起来set和get方法很简单,比如:

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

getA(){
    return A;
}

如有任何想法,我们将不胜感激!

谢谢, 约瑟夫

最佳答案

我只在野外看到过很少的 getter 和 setter 问题,只有其中一个可以通过单元测试检测到,而且只有当所有的 getter 和 setter 都一起测试时,而不是通过单独的测试方法。

考虑重复使用来自两对不同的 getters/setters 的相同字段的复制/粘贴错误。即,

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。 (上面的 bug 是 vi 用户造成的。)如果这些方法驻留在一个简单的数据持有者对象中,那么问题可能离问题的根源有点远。

出于这个原因,如果我完全测试 getter 和 setter(而且我经常不这样做),它来自一个测试方法,该方法首先使用不同的值调用所有 setter,然后对所有 getter 进行断言。

但是,您必须忍受的一个问题是,当其他人拿到代码并决定时,无法保证以“简单”getter 或 setter 开始生命的方法会保持这种状态,比如说,getter 是做一些有副作用的事情的好地方。

关于java - 我应该在什么条件下测试 get() 和 set() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2918929/

相关文章:

java - jUnit assertEquals string return "50"expected "50"but returned nothing 测试

java - JUnit + Derby + Spring : drop in-memory db after every test

android - Android 上一个库项目的独立测试项目

java - netbeans 如何从两个文本字段中获取固定值并将它们添加到带有按钮的第三个文本字段中?

C# - 从项目的发布版本中排除单元测试

java - 编写 JPA 存储库 JUnit,其中一个存储库依赖于其他存储库

Java:使用 assertEquals 测试系统输出,包括 "new lines"

java - 如果无法传递 POST 响应,如何回滚事务

java - Java 中的自定义事件设计

java - 实现 Bcrypt PasswordEncoder 后无法使用身份验证