【发布时间】:2021-08-08 12:56:47
【问题描述】:
我有一个Specflow 集成测试,它导致数据被添加到数据库中。这可能会很快完成,也可能需要一些时间,具体取决于消息积压的大小。我检查数据到数据库的步骤如下:
[Then(@"the enriched messages are written to the DB")]
public void ThenTheEnrichedMessagesAreThenWrittenToTheDB()
{
try
{
var DbConnectionOptions = new DbConnectionOptions();
_configuration.GetSection("ConnectionStrings").Bind(DbConnectionOptions);
SqlConnection myConnection = new SqlConnection(DbConnectionOptions.HistoryDb);
myConnection.Open();
SqlCommand myCommand = new SqlCommand("select * FROM dbo.Trades WHERE TradeId = 148874",
myConnection);
int timeout = 1000;
for (int i = 0; i < 13; i++)
{
using (var reader = myCommand.ExecuteReader())
{
if (reader.Read())
{
reader[reader.GetOrdinal("DealId")].Should().Be("148874");
}
}
Thread.Sleep(timeout);
timeout = timeout * 2;
}
}
catch (Exception e)
{
_logger.LogInformation("SQL Exception: " + e.ToString());
我想在其中轮询数据库以进行测试交易。每次轮询超时都应该加倍。
我的问题是这个测试永远不会失败。如果测试成功,则 if 中的流畅断言将通过,但如果不成功,则永远不会达到该条件而失败。如果我把它移到别处,即使交易被搁置,测试也可能会失败,如果我把它留在原处并且交易永远不会到达数据库,它将通过,因为断言永远不会被执行。我该如何解决这个问题?
【问题讨论】:
-
作为一般规则,测试永远不应该捕获异常(除非它实际上是在测试异常)。未处理的异常将导致测试失败;处理它不会。
标签: c# .net testing automated-tests specflow