2011-05-14 51 views
1

甲程序員寫一個程序的xyz程序。他已經認識到Div和Add值都基於相同的底層Op數據結構。因此,他編寫了以下JUnit測試代碼。爪哇JUnit中,接口,類標題

@Test 
public void testDiv() { 
Op aValue = new Div(8, 40, 「String」); 
assertEquals(5, aValue.getVal1()); 
assertEquals(「String 40/8 = 5」, aValue.toString()); 
} 

基於此代碼:爲Op編寫一個接口併爲Div編寫類頭。

- 我的回答是:

public interface IDiv { 
String aValue(); 
String toString(); 
} 

public class Div (int, String) { 
} 

這是正確的?

+0

您似乎沒有定義「Op」接口。我只能看到'IDiv'界面。你確定這是你想要的嗎? – 2011-05-14 21:20:19

回答

1

我的變化是:

public interface Op { 
    String getVal1(); 
} 

public class Div implements Op { 

    public Div(int a, int b, String c) { 
     ... 
    } 

    public getVal1() { 
     ... 
    } 
} 

我不加toString()方法Op接口,因爲Java中的每個對象隱含延伸已經有這種方法Object類。

+0

Thank you dude :) – Paradox 2011-05-14 19:07:40

+0

@paradox btw,我剛剛更新了我的答案:如果'Div'實現了'Op',那麼它應該爲來自'Op'的所有方法提供實現(例如'getVal1()')。 – 2011-05-14 19:14:26

0

我的回答是不完整的一個。我只關注技術要求 - 我的推理僅基於您粘貼的測試代碼。基於這裏描述的類/對象的語義,可能(也可能應該)淹沒更多的結論。讓我們擱置一會兒吧。

您的解決方案似乎並不完全正確的(我假設你的意思Op爲您發佈的接口名稱)。有了這個定義,測試不會簡單地編譯。我們知道,是通過什麼實現的Op(這裏分配給aValue變量)有(至少)兩種方法:

  • getVal1()
  • toString()

後者是微不足道的,因爲Java中的每一個對象都實現了這個方法(java.lang.Object所有類的超類保證)

所以Op接口應該是這樣的:

/*public*/ interface Op { 
    /*some return type*/ getVal1(); 
    // .. other methods (?) 
} 

Op的可視性修飾符是低重要的問題在這裏。

getVal1()方法的返回類型並不明顯。你將不得不檢查它,但可能爲了這條線編譯assertEquals(5, aValue.getVal1());它需要是Integer,int或可能是一些較小的數字類型。我不知道longLong會適合在這裏。