Я пишу много тестов для тестирования негативных сценариев, поэтому в основном, когда задача не выполняется, мне нужно проверить, выбрасывается ли правильный тип исключения и правильное ли сообщение.Я попробовал Googling:
public async void TaskToTest_OnFailGiveException()
{
var info = new Info();
var ex = await Record.ExceptionAsync(() => info.TaskToTest());
Assert.NotNull(ex);
Assert.IsType<Exception>(ex);
}
, а также для проверки сообщения
public void TaskToTest_OnFailGiveException()
{
var info = new Info();
var ex = Assert.ThrowsAsync<Exception>(() => info.TaskToTest());
Assert.NotNull(ex.Exception);
Assert.Equal(ex.Exception.Message, $"Failed to insert the info");
}
Проблема с ними обоими заключается в том, что задача не проваливается, поэтомутам он не дает никаких исключений, чтобы утверждать против.Я знаю, что если я хочу посмеяться над тем, что задание дает положительный результат, я могу info.TaskToTest().Returns(Task.CompletedTask)
, но мне не удалось найти его неудачный вариант.Есть ли способ убедиться, что задача не выполнена, чтобы я мог проверить исключение?
Это задача, которую я пытаюсь сделать неудачной
public virtual async Task TaskToTest()
{
bool result = await _database.InsertOrUpdateInfo(State.InfoID, _unhandledInfo.Count > 0 ? JsonConvert.SerializeObject(_unhandledInfo) : string.Empty);
if (!result)
{
_logger.LogError($"Error while calling InsertOrUpdateInfo. Info: {State.INfoID}");
var exception = new Exception("Failed to insert the info");
throw exception;
}
}