[英]how to create a function to tell me if a statement throws an exception or not in c#
我想讓一個函數接受一條語句作為參數,可以是字符串,也可以是我不知道的其他類型,如果該語句的執行引發異常,則返回true,否則返回false。
這可能取決於某種“字符串”執行,我不知道如何在C#中執行。
確實,這樣做的唯一原因是使測試代碼更容易。
最好使用單元測試框架,例如NUnit或Visual Studio Team Test:
要說一個方法應該拋出一個異常,您可以添加ExpectedException
屬性,例如:
[Test]
[ExpectedException(typeof(ArgumentException)]
public void NullUserIdInConstructor()
{
LogonInfo logonInfo = new LogonInfo(null, "P@ss0word");
}
如果您不添加此屬性而方法拋出,則測試將自動失敗。
為了完整起見,我還將回答您提出的問題:您無法執行字符串,但可以將Action作為參數傳遞。
bool ThrowsException(Action action)
{
try
{
action();
return false;
}
catch
{
return true;
}
}
您可以像這樣使用它,例如:
bool result = ThrowsException(() => { throw new NotImplementedException(); });
就我而言,這是沒有辦法的。
如果我正確理解了這一點,則需要以下內容:
public static bool ActionSucceeds(Action action, out Exception exception)
{
try
{
action();
exception = null;
return true;
}
catch (Exception ex)
{
exception = ex;
return false;
}
}
您應該真正將代碼的異常冒泡,該異常原本是用來檢查所討論方法的布爾值並以您喜歡的方式對其進行處理的。 異常非常適合處理特殊情況。 它不能很好地轉換為嘗試從方法返回true或false的情況。 多數民眾贊成不是設計例外。 它給您的方法帶來了不同的聯系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.