簡體   English   中英

如何在NUnit Assert.That子句中測試Lambda表達式的異常和返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM