例如下面的代碼,在NUnit的,我怎麼能明確地測試失敗
[Test()]
public void Test()
{
try{
GetNumber();
}
catch(Exception ex){
/* fail here */
}
...
}
我想我的失敗測試時,GetNumber方法拋出異常。
請指教。
非常感謝。
例如下面的代碼,在NUnit的,我怎麼能明確地測試失敗
[Test()]
public void Test()
{
try{
GetNumber();
}
catch(Exception ex){
/* fail here */
}
...
}
我想我的失敗測試時,GetNumber方法拋出異常。
請指教。
非常感謝。
你不需要在try/catch中包裝GetNumber()。如果GetNumber()拋出,你的測試將失敗。
如果您需要明確地使其失敗,請使用Assert.Fail();
所有測試都應該通過,如果您預期有異常,您應該使用ExpectedException屬性。如果你的代碼拋出預期的異常測試將通過。
Assert.Fail()
:http://www.nunit.org/index.php?p=utilityAsserts&r=2.2.7
雖然,可能是有一個斷言Assert.NoThrow,或類似的東西,從而確保您的方法不拋出。
ok,no Assert.NoThrow。太糟糕了,我覺得它更可讀 –
檢查更新的版本。 [Assert.DoesNotThrow](http://www.nunit.org/index.php?p=exceptionAsserts&r=2.6) –
不錯!感謝您的鏈接 –
如果GetNumber()
返回一個值,那麼你不應該做你想做的事。相反,你應該聲明返回值。如果您不希望出現異常,請不要打擾檢查異常情況。 NUnit框架將照顧到這一點,併爲您的測試失敗。
如果GetNumber()
不返回一個值,你可以做的三兩件事之一:
在這種情況下,第一個選項是最明確的。如果您可以驗證的唯一有趣的副作用是拋出異常,這很常見。但是,如果GetNumber()
不返回一個值,你真的應該考慮重命名你的方法:)
順便說一句,如果您發現自己處於情況# 3因爲你有複雜的驗證邏輯,你可能想嘗試[使用自定義約束類斷言](http://www.nunit.org/index.php?p=constraintModel&r=2.5.9)。儘管如此,你並沒有在這裏進行非常複雜的斷言,所以我將它保存爲另一個測試用例:) –
[Test()]
public void Test()
{
GetNumber();
}
失敗測試等同於從它拋出異常。因此,如果您的方法拋出測試將失敗。
在這種特殊情況下,您應該使用Assert.DoesNotThrow(()=> GetNumber())' – RJFalconer