簡體   English   中英

如何創建一個函數來告訴我語句是否在C#中引發異常

[英]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;
    }
}

因此,現在我們對您的問題有了更好的了解...

我建議在編寫可以捕獲並響應異常的測試時,考慮使用現有的測試框架,例如NUnitMSTest

這些庫提供了在執行過程中運行測試和捕獲異常(預期和異常)所需的基礎結構。 即使單個測試失敗,這也允許運行整套測試。 您還可以使用提供的Assert實用程序來幫助測試故障情況,而不是直接引發異常。

您應該真正將代碼的異常冒泡,該異常原本是用來檢查所討論方法的布爾值並以您喜歡的方式對其進行處理的。 異常非常適合處理特殊情況。 它不能很好地轉換為嘗試從方法返回true或false的情況。 多數民眾贊成不是設計例外。 它給您的方法帶來了不同的聯系。

暫無
暫無

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

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