1

このテストは実行されますが失敗します。なぜかわからない?長さ 1 の潜水艦クラスがあります。

@Test   
public void testShipConstructor() {
    assertTrue(Submarine.length == 1);      
}

クラスのコードは次のとおりです。

public abstract class Ship {

    private int size;
    public static int length;

    protected Ship(int size, String type, String shortForm) {
        this.size = size;
        this.setType(type);
        this.shortForm = shortForm;
    }

    public static void setLength(int length) {
    }

    public int getLength() {
        return length;
    }

    int getSize() {
        return size;
    }
}

public class Submarine extends Ship {

    private final static int SIZE = 1;

    /**
     * * Constructor, sets inherited length variable.
     */
    public Submarine() {
        super(SIZE, "Submarine", "#");
    }
}
4

2 に答える 2

6

Ship クラスをどこかでインスタンス化しましたか? コンストラクターが長さを表すために値 n を取ると仮定していますか?

仮定するpublic class Submarine extends Ship

Submarine(int size){}またはいずれかのコンストラクタShip(int ship){}

テストには以下が含まれている必要があります。

int desiredSize = 1;
Submarine mySub = new Submarine(desiredSize);
assertEquals(mySub.getSize(), desiredSize);
于 2013-03-30T13:00:03.420 に答える
1

サブマリンはクラス名ですか?その場合、静的な方法でアクセスするため、長さは静的だと思います。したがって、コンストラクタの外で長さを初期化する必要があります。さらに、テストはコンストラクターをテストしません。

于 2013-03-30T13:06:14.543 に答える