6

プロジェクトには多くのJavaBeanがあります。それらのJUnitテストクラスを生成する必要があります。Eclipse3.2およびjunit4.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以上のフィールドを持っています...

testEmployeeid()のようなゲッターとセッターの両方に対して単一のテストメソッドを取得できる方法はあり testName()ますか?これらのメソッドでは、2つのdiffを使用するのではなく、セッターとゲッターの両方をテストできます。それらのためのテスト方法...

これを行うためにEclipseをどのように構成する必要がありますか?

4

5 に答える 5

24

テスト駆動開発の哲学には、「壊れる可能性があるものはすべてテストする」というものがあります。つまり、テストを書くためだけに書くのではなく、役に立つテストに集中してください。

ゲッターとセッターはほとんどの場合、単純なコードであり、それ自体でテストする価値はありません。

これがあなたの嘆願に対する率直な答えではないことは承知していますが、これを指摘することはまだ役立つかもしれないと思いました ;-) では、そもそもなぜこれらすべてのゲッターとセッターのテストを実際に作成する必要があるのでしょうか?

于 2010-02-07T20:23:22.297 に答える
11

クラスに 100 個のフィールド (対応するセッター/ゲッターを含む) がある場合、オブジェクト モデルが正しく分解されていないと思われます。100 以上のフィールドというと、オブジェクトのフィールド数が桁外れに多いように聞こえますが、それにはいくつかの責任があり、より専門化された多数のオブジェクトに分割できると思います。

于 2010-02-07T20:34:13.270 に答える
5

これを自動化するために、おそらく Apache Commons の「beanutils」を使用できます。

http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/PropertyUtils.html#getSimpleProperty%28java.lang.Object,java.lang.String%29

たとえばdescribe(Object bean)、読み取り可能なすべての属性 (つまり、ゲッター) のマップを返すメソッドがあります。

次に、そのマップを繰り返して呼び出します。

setSimpleProperty(Object bean, String name, Object value)

public static Object getSimpleProperty(Object bean, String name)

そして、ゲッター/セッターがかなり些細なことであるという他のポスターに同意しますが、タイプミスをなくしたり、プロパティ変更リスナーをテストしたりするために、それらをテストする価値があると思います.

たとえば、これは Bean のゲッターを動的に抽出します。

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 と CommonsLogging の両方、および両方のライブラリの JAR をプロジェクトにダウンロードする必要があります。

于 2010-02-07T20:28:49.667 に答える
3

このライブラリがあなたの質問に対する答えだと思います: http://outsidemybox.github.com/testUtils/

Bean のすべての初期値、セッター、ゲッター、hashCode()、equals()、および toString() をテストします。デフォルトおよび非デフォルトのプロパティ/値のマップを定義するだけです。

デフォルト以外のコンストラクターを追加して Bean であるオブジェクトをテストすることもできます。

于 2011-03-04T21:07:35.077 に答える