2010-08-23 94 views

回答

3

分解讀取鍵盤的代碼,使其成爲界面。然後創建兩個實現,一個用於生產,實現「真正的」Java代碼讀取鍵盤;第二個可以從代碼訪問,特別是從您的JUnit測試中訪問。

使用後者,您的測試可以「輸入」任何需要的輸入。

補充:

這是不合法的代碼,我打字它關閉我的頭頂!這也只是一種方法:gpampara的方法可以讓你自己的Streams也可以工作。這取決於您的測試需求。

首先將界面

public interface Keyboard 
{ 
    public int getInt() ; 
} 

那麼 「真實」 的FPGA實現:

public class RealKeyboard 
    implements Keyboard 
{ 
    // I haven't done Java keyboard reading in ages, so this is 
    // likely not how to do it, but you should get the idea 
    private BufferedReader __r ; 

    public RealKeyboard(BufferedReader r) 
    { 
     __r = r ; 
    } 

    public int getInt() 
    { 
     // whatever you need to do with __r 
    } 
} 

那麼這裏有一個可能的測試執行:

public class TestKeyboard 
    implements Keyboard 
{ 
    private int __value ; 

    public TestKeyboard(int value) 
    { 
     __value = value ; 
    } 

    public int getInt() 
    { 
     return __value ; 
    } 
} 

當然,這將始終返回相同的價值,這可能不是你想要的。您可以使用setInt()方法執行實現,以便測試類可以在測試期間設置值,或者可以將值列表傳遞給構造函數,然後依次返回每個值。取決於你需要測試的東西。

然後調用代碼僅僅是通過下列操作之一:

​​

你可以使用Spring注入,或者只是在「生產」的代碼是硬編碼。但是在你的測試中,你可以通過你的一個測試實現。

+0

你好,感謝您的幫助,我沒有看到這個接口是如何工作的,我想我會有一個方法接口來讀取鍵盤輸入,以及一個這樣的實現: n = Keyboard .readInt(); 我的問題是:兩種實現之間的特殊變化是什麼? OBS:對不起英語不好,我來自巴西:D – elf 2010-08-24 13:16:36

+0

啊......訣竅是使用依賴注入...我會編輯我的答案,看看是否有幫助。 – 2010-08-24 15:54:34

+0

這個「啊」看起來像尤里卡:D我去讀更冷靜 – elf 2010-08-25 13:07:35

0

編寫你的類來分離實際的鍵盤輸入和鍵盤輸入的處理,然後分別測試它們。

至於鍵盤輸入本身,把NO功能放在閱讀鍵之外 - 這樣它就可以工作,或者它不會......你也可以模擬出給你鑰匙的班級,讓你嘲笑類將「已知」鍵提供給正在測試的類。

0

與其他答案類似,但我認爲您的抽象應基於Stream

通過在單元測試中提供ByteArray [輸入|輸出]流(或其他類似的東西),您可以很容易地將鍵盤輸入視爲流。