Java 吸气剂junit试验方法;二传手
我的项目中有很多JavaBean。我需要为它们生成一个JUnit测试类。使用Eclipse 3.2和junit 4.4生成的测试方法如下所示:Java 吸气剂junit试验方法;二传手,java,unit-testing,junit,getter-setter,Java,Unit Testing,Junit,Getter Setter,我的项目中有很多JavaBean。我需要为它们生成一个JUnit测试类。使用Eclipse 3.2和junit 4.4生成的测试方法如下所示: public void testGetName() { // fail("Not yet implemented"); } @Test public void testSetName() { // fail("Not yet implemented"); } @Test
public void testGetName() {
// fail("Not yet implemented");
}
@Test
public void testSetName() {
// fail("Not yet implemented");
}
@Test
public void testGetEmployeeid() {
// fail("Not yet implemented");
}
@Test
public void testSetEmployeeid() {
// fail("Not yet implemented");
}
我的一些豆子有100多个字段
有没有一种方法可以让我为getter和setter获得一个单一的测试方法,比如testEmployeeid()
,testName()
,这样在这些方法中,我就可以测试我的setter和getter,而不是对它们使用两种不同的测试方法
我应该如何配置eclipse来做到这一点?测试驱动开发的理念是“测试所有可能破坏的东西”。也就是说,将精力集中在有用的测试上,而不是仅仅为了测试而编写测试 getter和setter几乎总是微不足道的代码,不值得自己测试
我知道这不是对你请求的直接回答,但我认为指出这一点可能仍然有帮助;-)那么,为什么您首先需要为所有这些getter和setter编写测试呢?您可以使用Apache Commons的“beanutils”来帮助实现自动化: 例如,有一个方法
descripe(objectbean)
,它将返回所有可读属性(即getter)的映射
然后迭代该映射并调用:
setSimpleProperty(Object bean, String name, Object value)
及
虽然我同意其他的海报,但是getter/setter非常简单——我认为仍然值得测试它们——以消除拼写错误,测试属性更改侦听器等等
例如,这将动态提取bean的getter:
import java.io.Serializable;
import java.util.Set;
import org.apache.commons.beanutils.PropertyUtils;
public class MyTestBean implements Serializable {
private int a;
private int b;
private int c;
private String x;
private String y;
private String z;
public static void main(String[] args) throws Exception {
MyTestBean bean=new MyTestBean();
Set prop=PropertyUtils.describe(bean).keySet();
for (Object o : prop) {
System.out.println((String)o);
}
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
public String getZ() {
return z;
}
public void setZ(String z) {
this.z = z;
}}
您需要将BeanUtils和CommonLogging以及这两个库的JAR下载到项目中才能运行此代码。如果一个类中有100个字段(带有相应的setter/getter),我怀疑您的对象模型没有正确分解。对于一个对象来说,100多个字段听起来像是非常多的字段,我猜它有几个职责,可以在多个更专业的对象之间分配。我猜这个库就是您问题的答案: 它测试bean的所有初始值、setter、getter、hashCode()、equals()和toString()。您所要做的就是定义默认和非默认属性/值的映射
它还可以测试具有其他非默认构造函数的bean对象。您使用什么eclipse插件来生成测试方法?FWIW,下面的问题试图抛开争论,询问是否有一种方法可以根据您的喜好自动执行此操作-这里真正的问题与单元测试完全无关:“我的一些bean r具有超过100个字段”。。。对于任何阅读此问题的Java新手,请理解这是一个糟糕的编程。任何有100多个字段的类都有太多的责任。看看你是否不明白为什么。+1我同意访问器方法不需要测试。我缺少一个允许通过注释声明它们的功能。我强烈反对。为了回归的目的测试setter和getter,这样当setter/getter变得更复杂时,测试确认它们仍然像以前一样工作。是的,那就好了。Java有时过于冗长。C#这个更好。@Brian:我认为你的案子完全符合上述准则。如果我的getter/setter实现在可预见的将来变得更加复杂的可能性足够大,那么我当然会编写我的小测试。然而,我想说,你的“何时”在我看来仍然是一个相当大的“如果”;-)测试getter和setter会降低代码覆盖率,getter和setter应该被其他地方测试的某些行为使用(从而提供覆盖率),或者应该被删除,因为它们没有作为某些行为的一部分进行测试(因此,不应该在生产代码中使用)。贬值源于无法找到任何行为都没有使用的代码,包括未使用的getter和setter。仅供将来参考。请不要复制和粘贴答案,也不要自我宣传。谢谢。虽然经常是这样,但拥有这么多字段未必是错误的。例如,假设这个类的存在是为了提供到非常大的XML文件的Jaxb映射。
import java.io.Serializable;
import java.util.Set;
import org.apache.commons.beanutils.PropertyUtils;
public class MyTestBean implements Serializable {
private int a;
private int b;
private int c;
private String x;
private String y;
private String z;
public static void main(String[] args) throws Exception {
MyTestBean bean=new MyTestBean();
Set prop=PropertyUtils.describe(bean).keySet();
for (Object o : prop) {
System.out.println((String)o);
}
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
public String getZ() {
return z;
}
public void setZ(String z) {
this.z = z;
}}