2011-11-12 150 views
1

我對JUnit並不熟悉,所以不確定這是否是assertTrue(b_exception);的問題,因爲如果我在此處放置System.out.println("something");,它會打印出「某事」...謝謝!任何人都可以告訴我這個僞代碼有什麼問題嗎?

請注意,它是僞代碼,專注於邏輯。

b_exception = false; 
try{ 
    somethingThrowError(); 
}catch(Error e){ 
    b_exception = true; 
} 
assertTrue(b_exception); 
+1

什麼是意想不到的事情? – suat

+0

我不明白你在問什麼...... psudo代碼沒有錯?你是否說b_exception一直是錯誤的? – Matt

+2

用你寫的代碼,你的布爾值被設置爲false,你嘗試引發異常的東西(我假設),然後捕獲它將布爾值設置爲true,最後你的assert語句檢查它是否爲真,並且執行將繼續過去這塊。你期望發生什麼? –

回答

2

我不知道是什麼問題,你的代碼,因爲你還沒有說,它是如何失敗的,以滿足您的期望,但是出於測試正確的成語,一個異常被拋出是使用JUnit 4的註解:

@Test(expected=SpecificError.class) 
public void testError(){ 
    somethingThrowError(); 
} 
+0

這只是僞代碼,我的朋友告訴我有什麼問題,就像一個測試問題......但我真的找不到該代碼的任何邏輯錯誤。所以......請讓我知道,如果你知道代碼的錯誤,從邏輯的角度來看。謝謝!! – Kevin

2

我只能猜測,您正在尋找這樣的:

try{ 
    somethingThrowError(); 
    fail("Exception expected"); 
}catch(AsSpecificAsPossibleException e){ 
    //should happen, OK 
    //optionally assert exception message, etc. 
} 

還要注意的是醒目的Error是一個壞主意,用具體的例外您可以。

更新:@Michael Borgwardt的答案實際上甚至更好,但只有在測試中除了單行之外沒有其他東西(沒有其他可拋出的東西)。 @Test(expected不允許你執行額外的異常信息斷言(但你應該?)

+0

其實這是一個很糟糕的主意,這段代碼被破壞了,因爲fail()也只是拋出了一個AssertionError ... –

+0

@MichaelBorgwardt:哇,很好,趕緊糾正,謝謝!我不記得是什麼時候我最後一次明確地使用了'Error' ...... –

1

不知道你認爲是什麼錯誤的代碼。
assertTrue將一直執行,System.out.println也一樣。
它 - assertTrue - 如果參數不是true,將發出錯誤信號,如果參數是true,則會發出「通過測試」。
也許你應該使用System.out.println("b_exception = " + b_exception);看看發生了什麼。

相關問題