【发布时间】:2020-02-05 14:20:40
【问题描述】:
我正在用 C# 中的 nUnit 编写一个 Intigration 测试。
我的代码是:
public async Task<bool> WriteData(Document data, string tableName)
{
try
{
var table = Table.LoadTable(_dynamoDbClient, tableName);
table.PutItem(data);
return true;
}
catch (Exception e)
{
_logger.Info("Failed Writing Record");
_logger.Info("Error: " + e.Message);
return false;
}
}
我的测试是:
public void TestToSeeIfWeGetAnExceptionWhenProvidingBadDataToTheDatabase()
{
// arrange
var item = new Document
{
["Id"] = "1001",
["TransactionID"] = 111111,
["StatementType"] = "TestBank"
};
_bankStatementTable = "does-not-exist";
// act / assert
Assert.Catch<System.Exception>(() => _awsDynamoDbManager.WriteData(item, _bankStatementTable));
}
因为我将错误的数据传递给数据库,所以我预计会出现异常,但我得到了一个。
但是,测试失败。
我从测试运行者那里得到这条消息:
预期:
的实例 但是是:null
如果我在 Debug 中运行测试,我可以看到 Catch 被击中。 我错过了什么?
【问题讨论】:
-
我认为
Assert.Catch仅适用于未应得的异常。 -
WriteData在异常情况下返回false -
您正在使用被测主题中的异常。测试本身没有什么可捕捉的。您需要断言该测试用例的预期行为,即如果抛出异常,主题将返回
false
标签: c# unit-testing nunit