Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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 吸气剂junit试验方法;二传手_Java_Unit Testing_Junit_Getter Setter - Fatal编程技术网

Java 吸气剂junit试验方法;二传手

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

我的项目中有很多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 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;
    }}