2013-04-26 205 views
1

在nunit測試中,我們可以斷言,如果測試在某種情況下失敗,那麼它就是合格(即預期會嘗試失敗)。斷言測試失敗是成功的

但它應該在所有其他情況下通過。

事情是,測試可能會崩潰之前,它可以達到它的斷言部分。

我的意思是在

[TestSetup] 
void init() 
{ 
    if (condition==true) 
    { 
    Assert.That(this test fails); /*any feature to do this?*/ 
    } 
} 
+0

我真的不明白。你是否在測試設置中聲明瞭某些東西?也許試着把你真實的例子。 – gustavodidomenico 2013-04-26 16:38:55

回答

3

線的東西如果測試會失敗,且它歸類爲在某些情況下的傳球,這聽起來不好的測試。用明確的方法名稱將其分解爲單個測試,詳細說明它的實現。

因此,不是有一個測試,並有一個條件在裏面,將它分成每個場景。這樣,你可以有一個場景,在這種情況下,它應該失敗,像

// do stuff 
bool success = DoStuff(); 
Assert.IsFalse(success); 
+0

同意。雖然你的答案是沒有確切的一個我一直在尋找,我仍然覺得它比我所期待的更好。謝謝。 – dushyantp 2013-04-29 08:46:05

0

這有點難以理解你的問題。你是否想要Assert.Fail()強制失敗?是這樣的...

[TestSetup] 
public void Init() 
{ 
    if (condition==true) 
    { 
    Assert.Fail(); 
    } 
} 

相反,如果你想檢查失敗,而不是原因一個,你應該遵循雅蘭的意見,並檢查你正在驗證開展工作的具體事實 - 如方法的返回值。

+0

我一直在尋找像聲稱它失敗並不會導致失敗的事情。無論如何,我認爲我的行動計劃是基於一個搖搖欲墜的基礎和可能雅蘭的建議(查看以上的ANS)是最好的。謝謝。 – dushyantp 2013-04-29 08:47:31

0

您還可以使用「Action」對象調用操作中的代碼,並在該操作爲異常時測試該操作。看FluentAssertions他們有很多例子。

int number1 = 1; 
    int number0 = 0; 
    Action someAction =() => { int j = number1/number0; }; 
    someAction.ShouldThrow<DivideByZeroException>();