![](/img/trans.png)
[英]nUnit Assert.That(method,Throws.Exception) not catching exceptions
[英]How to test for exceptions and a return value from a lambda expression in an NUnit Assert.That clause
我正在執行一個簡單的NUnit測試,並希望確認我的方法中沒有異常。 然而,這種方法會返回的東西。我想測試的返回值也是如此 。
這是我現有的代碼,用於測試異常(有效!):
// This works
[Test]
public void AbleToGetTheDatabaseNames()
{
Assert.That( () => GetTheDatabaseNames(), Throws.Nothing);
}
private List<string> GetTheDatabaseNames()
{
var mySql = new MySqlDb();
return mySql.GetDatabaseNames();
}
但是,在lambda表達式() => GetTheDatabaseNames()
如何獲得返回的值,所以我可以繼續測試返回的字符串列表了嗎?
// This doesn't work
[Test]
public void AbleToGetTheDatabaseNames()
{
Assert.That( () => GetTheDatabaseNames(), Throws.Nothing);
Assert.That( retVal, Has.Count.EqualTo(1));
}
private List<string> GetTheDatabaseNames()
{
var mySql = new MySqlDb();
return mySql.GetDatabaseNames();
}
如何從lambda表達式獲取retVal
,以便可以獲取返回的List<string>
? 甚至可以在這里做嗎? 如果不是,那么推薦的模式是什么-我應該兩次調用GetTheDatabaseNames()
(這似乎是多余的)嗎?
只需調用被測成員並獲取返回值即可。 如果未引發錯誤,則代碼將完成。 無需斷言不會引發任何錯誤。 引發的錯誤應使測試失敗
[Test]
public void AbleToGetTheDatabaseNames() {
//Arrange
var mySql = new MySqlDb();
//Act
List<string> retVal = mySql.GetDatabaseNames();
//Assert
Assert.That(retVal, Has.Count.EqualTo(1));
}
另一種方法是在lambda表達式中捕獲結果並將其傳遞給下一個斷言。
[Test]
public void AbleToGetTheDatabaseNames() {
//Arrange
List<string> retVal = null;
//Act
Action act = () => retVal = new MySqlDb.GetDatabaseNames();
//Assert
Assert.That(act, Throws.Nothing);
Assert.That(retVal, Has.Count.EqualTo(1));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.