![](/img/trans.png)
[英]Debug.Assert (false) exception swallowed in mono unit test project
[英]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.