2011-12-26 25 views
4

我想在使用xUnit 1.8.0.1549的dll應用程序(VS2010/C#)中運行測試。 爲此,我通過Visual Studio使用「Start External Program」在項目屬性中的「Start Action」下運行xUnit,通過GUI runner(C:\ mypath \ xunit.gui.clr4.x86.exe)運行dll。Visual Studio與xUnit,Assert.Throws和「異常是由用戶代碼未處理」

我想測試一下,如果一些方法引發異常,要做到這一點,我使用類似以下內容:

Assert.Throws<Exception>(
    delegate 
    { 
     //my method to test... 
     string tmp = p.TotalPayload; 
    } 
); 

的問題是,調試器停止,我的方法中,當引發的異常說「異常未被用戶代碼處理」。這很糟糕,因爲它一直阻止了gui runner,迫使我按F5鍵。 我想順利地運行測試,我該怎麼做? 謝謝

回答

-1

如果您進入Visual Studio選項並取消選中「Just my code」設置,則xUnit框架將被視爲用戶代碼,並且這些異常(xUnit期望的)不會提示您。

我不知道任何方式來控制每個程序集的這種行爲(只考慮xUnit是用戶代碼,而不是其他外部代碼)。

0

當您檢查是否發生異常時,您必須在單元測試代碼中處理異常。現在,你沒有這樣做。

這裏有一個例子: 我有讀取一個文件名,並進行一些處理方法:

public void ReadCurveFile(string curveFileName) 
    {   
     if (curveFileName == null) //is null 
      throw new ArgumentNullException(nameof(curveFileName)); 
     if (!File.Exists(curveFileName))//doesn't exists 
      throw new ArgumentException("{0} Does'nt exists", curveFileName);  

現在我寫一個測試方法來測試像這樣的代碼...等:

[Fact] 
    public void TestReadCurveFile() 
    { 
     MyClass tbGenTest = new MyClass(); 

     try 
     { 
      tbGenTest.ReadCurveFile(null); 
     } 
     catch (Exception ex) 
     { 
      Assert.True(ex is ArgumentNullException); 
     } 
     try 
     { 
      tbGenTest.ReadCurveFile(@"TestData\PCMTestFile2.csv"); 
     } 
     catch (Exception ex) 
     { 
      Assert.True(ex is ArgumentException); 
     } 

現在您的測試應該通過!

相關問題