2009-09-24 149 views

回答

2

聽起來像一個危險的想法,除非它是一個集成測試,並說數據刪除說。爲什麼不在測試中自己做呢?

顯然可以設置班級中的私人標誌。

這是Charlie Poole自己has suggested如果你一定要

+1

那是令人沮喪的,我會期望某種NUnit.CurrentTestContext API。我只需要知道測試是否成功,因爲如果測試失敗,我可以提供更多信息來幫助進行調試。 – 2009-09-24 19:14:49

2

只有當你手動執行此操作。事實上,你甚至不知道哪些測試打算運行。在NUnit IDE中,可以啓用一些測試並禁用其他一些測試。如果你想知道一些具體的測試已經用完,您可以包括這樣的代碼在你的測試類:

enum TestStateEnum { DISABLED, FAILED, SUCCEDED }; 
TestStateEnum test1State = TestStateEnum.DISABLED; 

[Test] 
void Test1() 
{ 
test1State = TestStateEnum.FAILED; // On the beginning of your test 
... 
test1State = TestStateEnum.SUCCEDED; // On the End of your Test 
} 

然後你可以檢查test1State變量。如果測試引發異常,則不會設置SUCCEDED。你也可以把它放進一個嘗試捕捉終於在您的測試塊以稍微不同的邏輯:

[Test] 
void Test1() 
{ 
test1State = TestStateEnum.SUCCEDED; // On the beginning of your test 
try 
{ 
    ... // Your Test 
} 
catch(Exception) 
{ 
    test1State = TestStateEnum.FAILED; 
    throw; // Rethrows the Exception 
} 
} 
+0

它不是試圖告訴哪個測試運行,只是我想拋出一個不同的錯誤,所以我可以得到更準確的堆棧跟蹤 – 2009-09-24 19:11:04

-1

恕我直言推倒邏輯應該是獨立的測試結果。

理想情況下,你應該避免完全使用setup和teardown,al xunit.net。有關更多信息,請參閱here

+0

通常,絕對那是你應該做的。不過,我喜歡讓自己的測試保持乾淨和內聚的BDD風格。有時候這意味着通過lambdas設置givens和assert並在TearDown中執行它們。問題是,如果由於某種原因安裝程序或測試機構失敗,堆棧跟蹤令人困惑。 – 2009-09-24 19:09:32

25

對於類似的SO問題,這已經在Ran's answer中解決了。引用Ran:

從版本2.5.7開始,NUnit允許Teardown檢測最後一次測試是否失敗。 新的TestContext類允許測試訪問關於它們自己的信息,包括TestStauts。

有關詳細信息,請如果你想使用TearDown中檢測與NUnit的3.5最後一次測試的狀態是指http://nunit.org/?p=releaseNotes&r=2.5.7

[TearDown] 
public void TearDown() 
{ 
    if (TestContext.CurrentContext.Result.Status == TestStatus.Failed) 
    { 
     PerformCleanUpFromTest(); 
    } 
} 
+0

感謝您的鏈接。請注意,這個問題在David回答之前的一年半內發佈。 – 2013-05-06 20:00:22

+3

在Nunit 3.x中它是'if(TestContext.CurrentContext.Result.Outcome == ResultState.Failure)' – Lukas 2016-07-11 15:44:18

4

它應該是:

[TearDown] 
public void TearDown() 
{ 
    if (TestContext.CurrentContext.Result.Outcome.Status.Equals(TestStatus.Failed)) 
    { 
     //your code 
    } 
} 
相關問題