2012-04-13 77 views
0

測試類我目前正在對以下問題的修訂:創建方法和Java的

一個VolumeModel存儲數據的音量控制對象。音量有一定的水平,它也可以處於靜音狀態。

(下面的什麼是UML圖:)

VolumeModel得出以下爲 - 類名

靜音:整數 - 屬性

程度:int - 屬性

+ .. ..方法 - 的該類方法

一)寫下所有的方法頭,包括構造函數,你會期望在這個類,這樣看它符合支持數據封裝的傳統標準。 (不要編寫方法體或文檔)。

至於我對這個問題的答案我寫的是這樣的:

public VolumeModel() 
public VolumeModel(boolean muted, int level) 
public void setLevel(int level) 
public int getLevel() 
public setMuted(boolean muted) 
public boolean isMuted() 
public void turnUp() 
public void turnUp(int level) 
public String toString() 
public boolean equals(VolumeModel V) 

我不知道這是否是所有預期的方法頭,包括構造函數,即有望在這一類中可以看出由於以下問題(即與上述有關的問題)下方:

b)利用你部分聲明的方法(a)中,編寫代碼測試程序來:

  • 創建卷模型的實例...
  • 有音量級別1,而不是靜音:在一個循環中
  • ,穩步提高音量10級:
  • 然後將音量靜音;
  • 最終輸出的音量模型對象

至於我的回答對上述到目前爲止這一問題的狀態,我已經做到了這一點:

VolumeModel vml = new VolumeModel(); 
vml.setLevel(1); 
vml.setMuted(false); 

VolumeModel volumelevel = new VolumeModel(true, 11); 
while (!vml.equals(volumelevel) 
{ 
//to be completed 
} 

這段代碼上面沒有完成,因爲我在這方面掙扎,所以如果有任何提示,有人可以給我,然後我會很感激。

另外,關於我對問題a)的以下答案的任何建議和反饋也會有所幫助。

在此先感謝。

ps - 我無法在我的eclipse軟件上嘗試這個代碼,因爲我的eclipse軟件由於某種原因不能在我的筆記本電腦上工作,但是當我找時間去我的電腦實驗室時,我會看看我是否可以在那邊的電腦上測試eclipse軟件上的代碼。

+1

我建議你測試一下實際工作的代碼,如果你發現一個bug,在你的調試器中遍歷代碼,看看它沒有做到你期望的。我會評論說,你似乎沒有使用你在b)中的代碼中定義的所有方法。 – 2012-04-13 14:55:18

+0

@Peter Lawrey - 感謝您的評論。我不同意你的看法,一旦我下週拿到電腦實驗室,我會正確地進行測試,但現在我只能從理論上回答這些問題。 – user1279780 2012-04-13 15:06:09

+1

在這種情況下,我只能回答你的理論需求。 ;)我建議你在(a)中的方法應該只是你在(b)中使用的方法。 – 2012-04-13 15:08:18

回答

1

您不需要創建新的VolumeModel來測試。你也不需要equals方法。

而不是做一個while循環試試這個的:

for(i=2;i<11;i++){ 
    vml.turnUp(); //provided that turnUp sets the volume up a level 
} 
vml.setMuted(true); 

此時你應該指定要如何輸出對象的狀態。 而不是試圖重新實現的toString,因爲它似乎你在做什麼,你可以創建自己的outputState()這樣

public void outputState(VolumeModel v) 

的返回類型爲void,因爲你可以簡單地把一系列的System.out的,或無論你喜歡哪種輸出系統。

希望這會有所幫助。

2

一些言論:

  • 你忘了申報setMuted()
  • 返回類型是沒有的javadoc。儘管大多數方法都很明顯,例如turnUp(int level)是做什麼的?參數是否爲新的級別(在這種情況下,它與setLevel()執行的操作相同)還是增量?當使用無參數構造函數構造時,對象的狀態是什麼?
  • 如果equals()被覆蓋,那麼hashCode()也必須是。合約是相同的對象必須具有相同的hashCode。而且,equals方法應該採用Object作爲參數。您可以實現一個equals(VolumeModel)方法,但請注意,您不會覆蓋Object.equals()方法,因此該方法將永遠不會被集合類調用。
  • 奇怪的是有turnUp方法,但沒有turnDown
  • 這是奇怪的沒有限制(雖然它沒有問在問題中)。

最後,您的代碼段不會執行所要求的操作。它應該:

  • 創造出獨特的VolumeModel實例,具有音量致電setMuted(true)
  • 電話getLevel()isMuted()中的9次迭代
  • 靜音它的循環設置爲1,而不是靜音
  • 通話turnUp()並檢查值分別爲10true。 該問題並未要求您實現equals,並測試兩個VolumeModel實例之間的相等性。
+1

我會補充說,你應該有'等於(對象)'而不是'等於(VolumeModel)' – 2012-04-13 15:08:52

+0

是的,我錯過了。我會編輯我的答案。 – 2012-04-13 15:10:01

+0

感謝您的評論,我的假設是turnUp(int level)增加了音量,而setLevel()只會將音量設置爲10級(我可能在這裏錯了),因爲問題(b)只希望音量增加到10級。 – user1279780 2012-04-13 15:13:39