假设我们想测试以下方法。这是一个人为的网络调用,如果请求失败,它会记录一个警告,然后在三次尝试后抛出。
private async Task<HttpResponseMessage> ContrivedNetworkRequest(ILogger<IContrived> logger, HttpClient client)
{
for (var i = 0; i < 3; i++)
{
var response = await client.GetAsync("http://example.com");
if (response.IsSuccessStatusCode)
return response;
logger.LogWarning("Warning!");
}
throw new ContrivedException("Error!");
}
我们只想测试是否记录了警告日志。也就是说,我们不想测试该方法是否抛出异常。抛出在其他地方进行了测试,我们不希望在这种情况下在同一个测试中使用两个断言来测试日志记录和抛出。
有没有办法告诉 MSTest V3(使用 .NET 8)在发生异常时退出测试方法,因为我们只对其他功能感兴趣?
有没有办法告诉 MSTest V3(使用 .NET 8)在发生异常时退出测试方法异常已经退出方法。 该测试可以像任何其他代码一样简单地捕获该异常。 例如:
// arrange
var logger = CreateMockLogger();
var client = CreateMockClient();
// act
try
{
ContrivedNetworkRequest(logger, client)
}
catch {}
// assert
// ...