如何从 NUnit Assert.That 子句中的 lambda 表达式测试异常和 return 值
How to test for exceptions and a return value from a lambda expression in an NUnit Assert.That clause
我正在执行一个简单的 NUnit 测试,想确认我的方法没有异常。但是,此方法将 return 一些东西:我想测试 returned 值 以及 。
这是我现有的测试异常的代码(有效!):
// This works
[Test]
public void AbleToGetTheDatabaseNames()
{
Assert.That( () => GetTheDatabaseNames(), Throws.Nothing);
}
private List<string> GetTheDatabaseNames()
{
var mySql = new MySqlDb();
return mySql.GetDatabaseNames();
}
但是,在 lambda 表达式 () => GetTheDatabaseNames()
中,我如何获得 returned 值,以便我可以继续测试 returned 字符串列表?
// 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
以便我可以得到 returned 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));
}
我正在执行一个简单的 NUnit 测试,想确认我的方法没有异常。但是,此方法将 return 一些东西:我想测试 returned 值 以及 。
这是我现有的测试异常的代码(有效!):
// This works
[Test]
public void AbleToGetTheDatabaseNames()
{
Assert.That( () => GetTheDatabaseNames(), Throws.Nothing);
}
private List<string> GetTheDatabaseNames()
{
var mySql = new MySqlDb();
return mySql.GetDatabaseNames();
}
但是,在 lambda 表达式 () => GetTheDatabaseNames()
中,我如何获得 returned 值,以便我可以继续测试 returned 字符串列表?
// 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
以便我可以得到 returned 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));
}