簡體   English   中英

如何測試可吞咽的異常

[英]How to test a swallowed exception

我花了一些時間尋找解決問題的方法,但沒有成功! 這是我的問題:我有一些執行以下操作的代碼:

public void DoSomething(){
    try{
       DoStuffThatCanThrowException();
    }catch(Exception e){
       // Do nothing...
    }
}

如您所見, try catch塊吞沒了可以在DoStuffThatCanThrowException()拋出的所有異常。 我正在努力想出一種編寫單元測試的方法,該方法基本上可以確保DoStuffThatCanThrowException()中不會引發任何異常。 這里的困難是我既不能更改try catch塊,也不能更改DoStuffThatCanThrowException()方法。

任何提示都受到高度贊賞。

編輯我忘記提及的一個重要細節,我不能直接調用DoStuffThatCanThrowException ,因為它是internal ,因此在外界看不見。

您不能僅從單元測試本身調用DoStuffThatCanThrowException,因此根本不會被try ... catch包圍嗎?

編輯 :剛剛看到您的方法是內部的。 為了測試的目的,我建議您使用封裝它的公共方法。 這樣,您可以臨時測試事物。 一旦確定該方法不會失敗,您就不再需要try ... catch了。

很抱歉弄亂答案,也許反思會幫助您深入探討?

ClassContainingInternalMethod cl = new ClassContainingInternalMethod ();

//any private or internal method you want here.
MethodInfo dynMethod = 
cl.GetType().GetMethod("DoSomeStuff", BindingFlags.NonPublic | BindingFlags.Instance);

dynMethod.Invoke(cl, new object[] {});

您可以直接調用DoStuffThatCanThrowException()嗎? 如果不是,請創建包含try try catch塊的原始類的子類,然后從那里調用而沒有catch塊。

class ClassUnderTest extends OriginalClass
{
    @Override
    public void functionToTest()
    {
             DoStuffThatCanThrowException()
    }

}

而且,很難測試是否存在異常。 您需要找到所有可能引發的潛在異常並對此進行測試。 即使這樣,您所要說的就是“進行這些測試,不會引發任何異常”。 這沒有說“永遠不會拋出異常”那樣強大,但是通常足夠好。

在try塊內調用DoStuffThatCanThrowException()之后立即添加一個肯定的斷言。 如果發生異常,則不會執行斷言。 或者,在catch塊內添加一個否定斷言。 不知道這是否能回答您的問題; 這不是很清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM