2011-11-28 111 views
0

我想測試一個負載方法,它引發一個StreamCorruptedException。但是當我用junit 4測試它時,測試失敗了。Junit預計異常失敗

我的加載方法:

public BookDataProvider(String filename) throws StreamCorruptedException { ... } 

我的測試類:

public class TestClass { 
    @Test (expected=StreamCorruptedException.class) 
    public void wrongFileTest() throws StreamCorruptedException { 
     BookDataProvider bdp = new BookDataProvider("wrong filename"); 
    } 
} 

的方法拋出異常,但測試失敗。我做錯了什麼?

+0

它看起來正確,你確定例外嗎?也許它是不同的? – erimerturk

+1

是的,我之前也有過這個功能......請在課程前面添加包裝以確保。另外,嘗試捕獲Exception.class,然後繼續自己的。如果您刪除註釋,您會看到異常嗎? –

+1

嘗試刪除註釋並捕獲異常,看看你是否得到了你的東西。如果是這樣,那麼我們可以深入一點。您是否能夠在到達測試用例之前捕獲StreamCorruptedException並重新投擲其他東西? –

回答

1

從您的代碼中,我看到您的測試將錯誤的文件名傳遞給BookDataProvider構造函數,並且這不會導致StreamCorruptedException,它只會導致IOException。發生StreamCorruptedException的原因主要是由於用於寫入和讀取的流的差異導致數據反序列化失敗。例如,如果它不是使用ObjectOutputStream編寫的,它會在使用ObjectInputStream嘗試讀取數據時發生。

+0

「文件名錯誤的文件存在,但它是一個圖像,所以它應該拋出StreamCorruptedException。 – gberes