2013-03-30 71 views
1

此測試運行但失敗。不知道爲什麼?有與長度級潛艇1如何JUnit測試構造函數?

@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", "#"); 
    } 
} 
+2

什麼是'潛水艇'?你能展示這堂課嗎? –

+2

測試對象的行爲,而不是它是否構造或其值。 – yehe

+0

public abstract class Ship { \t \t private int size; \t \t \t public static int length; \t \t 保護\t船(INT大小,字符串型,字符串簡短版本){ \t \t \t this.size =大小; \t \t \t this.setType(type); \t \t \t this.shortForm = shortForm; \t \t} \t \t \t \t公共靜態無效setLength(INT長度){ \t \t} \t \t 公共\t INT的getLength(){ \t \t \t返回長度; \t \t} \t \t \t INT \t的getSize(){ \t \t \t返回大小; \t \t} \t} \t --------- \t \t 公共類海底延伸船舶{ \t \t私人最終靜態INT SIZE = 1; \t \t/** \t \t *構造函數,設置繼承的長度變量。 \t \t */ \t \t公共潛艇(){ \t \t \t超級(SIZE 「海底」, 「#」); \t \t} \t} – user742730

回答

4

你實例化你的船級地方?我假設構造函數的值爲n來表示長度?

假設public class Submarine extends Ship

和任Submarine(int size){}Ship(int ship){}構造

您的測試應包括:

int desiredSize = 1; 
Submarine mySub = new Submarine(desiredSize); 
assertEquals(mySub.getSize(), desiredSize); 
+0

我在一個陣列車隊中實例化了新的潛艇。現在測試不正確地在assertEquals(submarine.getLenth(),0)中傳遞0,@Test \t public void testShipConstructor2(){ \t \t Ship [] fleet = new Ship [10]; \t \t int length = 1; \t \t艦隊[3] =新潛艇(); \t \t assertEquals(Submarine.getLength(),0); \t \t} – user742730

+1

因爲測試正在查看名爲Length的int字段,但您的構造函數正在設置名爲Size的字段。我已根據您添加的代碼更新了我的代碼示例... – Mike

+0

不客氣。請接受解決您的問題的答案,向社區表示感謝。 – Mike

1

是潛艇的類名?在那種情況下,我認爲長度是靜態的,因爲你以靜態方式訪問它。所以你應該在構造函數之外初始化長度。此外,你的測試不測試構造函數。

+0

謝謝。現在它似乎與尺寸而不是長度一起工作。\t Ship []艦隊=新船[10]; \t \t int size = 1; \t \t艦隊[3] =新潛艇(); \t \t assertEquals(Submarine.getSize(),1); \t \t} – user742730

+0

等一下,讓靜態值所做的測試工作,但停止了計劃工作。所以已經恢復到不是靜態值,但現在測試不起作用。是否有另一種簡單的方法來測試構造函數? – user742730

+0

我不明白你的測試。在你的代碼中,你永遠不會初始化長度,那麼爲什麼長度應該是1呢? – user2226834