2013-04-27 44 views
-1

我試圖做一個JUnit測試方法,如果RandomAccessFile的變量是零基礎是什麼OpenDB如下設置,將檢查對象的JUnit測試。這種方法的兩種可能結果是:rStream(randomAccessFile)將打開用戶指定的文件,或者在文件不存在時拋出IO異常並將其保留爲空。如果可能,我想離開openDB方法,並相應地編寫測試代碼。謝謝。創造了將要進行空

public void openDB(){ 
     System.out.println("Name of your Database?\n"); 
     this.rStream = new RandomAccess(kb.nextLine(), "r", true); 
    } 

(測試,因爲它目前的立場。app.getrStream簡單的返回問題的rStream)如果要斷言結果當openDB方法失敗,只需修改您的測試,以

@Test 
public void testOpenDB() 
{ 
    mainApp app = new mainApp(); 
    app.openDB(); 
    assertNull(app.getrStream()); 
} 
+2

問題是什麼測試斷言IOException? – 2013-04-27 17:16:43

+0

我想編寫一個測試方法,如果輸入的fileName不存在,它將傳遞異常。 – Liam 2013-04-27 17:18:14

+2

這實際上不是單元測試的目的。首先,他們不應該要求用戶交互。根據定義,單元測試應該測試一個獨立的,獨立的代碼單元。 http://stackoverflow.com/tags/unit-testing/info – 2013-04-27 17:19:15

回答

2

使用@Test標註的預期屬性,就像這樣:

@Test(expected = IOException.class) 
public void testOpenDB() throws IOException { 
    app.openDB(); 
} 

無需窺探應用程序檢查NUL的內部狀態流的性質。

+0

測試仍然失敗,因爲它似乎在尋找IOException,即使我們的錯誤是FileNotFound異常。我試圖將其更改爲FileNotFoundException.class,並相應地拋出FileNotFoundException,但我仍然沒有得到真正的結果。我是否認爲這是爲了回報真實還是假想返回假? – Liam 2013-04-27 17:32:02

+0

'FileNotFoundException'是'IOException'的一個子類,所以測試註釋應該仍然有效。此外,測試不*返回* true或false - 它們通過或失敗,取決於您所做的斷言。當你寫這樣的測試時,你斷言你期望拋出一個IOException的子類。 – 2013-04-27 17:51:08

+0

對不起,我打算說通過/失敗。在這種情況下,預期的結果應該是通過還是失敗,因爲測試是期望IOException? – Liam 2013-04-27 17:58:52

1

您可以通過註釋與

@Test(expected=IOException.class) 

假設你使用JUnit 4