Ответ 1
Вы должны использовать Func<Task>
вместо Action
:
[Test]
public void TestFail()
{
Func<Task> f = async () => { await Fail(); };
f.ShouldThrow<Exception>();
}
Это вызовет следующее расширение, которое используется для проверки асинхронных методов
public static ExceptionAssertions<TException> ShouldThrow<TException>(
this Func<Task> asyncAction, string because = "", params object[] becauseArgs)
where TException : Exception
Внутренне этот метод запускает задачу, возвращаемую Func
и ждет ее. Что-то вроде
try
{
Task.Run(asyncAction).Wait();
}
catch (Exception exception)
{
// get actual exception if it wrapped in AggregateException
}
Обратите внимание, что сам тест является синхронным.