diff --git a/src/NUnitFramework/framework/Constraints/ThrowsExceptionConstraint.cs b/src/NUnitFramework/framework/Constraints/ThrowsExceptionConstraint.cs index 49e93e4dde..3540039d9d 100644 --- a/src/NUnitFramework/framework/Constraints/ThrowsExceptionConstraint.cs +++ b/src/NUnitFramework/framework/Constraints/ThrowsExceptionConstraint.cs @@ -1,6 +1,7 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt using System; +using System.Threading.Tasks; using NUnit.Framework.Internal; namespace NUnit.Framework.Constraints @@ -42,6 +43,14 @@ public override ConstraintResult ApplyTo(ActualValueDelegate d return ApplyTo((Delegate)del); } + /// + public override async Task ApplyToAsync(Func> actual) + { + var exception = await ExceptionHelper.RecordExceptionAsync(actual, nameof(actual)); + + return new ThrowsExceptionConstraintResult(this, exception); + } + #region Nested Result Class private class ThrowsExceptionConstraintResult : ConstraintResult diff --git a/src/NUnitFramework/tests/Assertions/AssertThatAsyncTests.cs b/src/NUnitFramework/tests/Assertions/AssertThatAsyncTests.cs index 05bfc5d8a4..b8aafdff44 100644 --- a/src/NUnitFramework/tests/Assertions/AssertThatAsyncTests.cs +++ b/src/NUnitFramework/tests/Assertions/AssertThatAsyncTests.cs @@ -27,6 +27,18 @@ await Assert.ThatAsync(() => Task.FromCanceled(cancel.Token), .With.Property(nameof(TaskCanceledException.CancellationToken)).EqualTo(cancel.Token)); } + [Test] + public async Task AssertionPasses_FaultedDelegate_ThrowsAnyException() + { + await Assert.ThatAsync(() => throw new Exception("Ugh"), Throws.Exception); + } + + [Test] + public async Task AssertionPasses_FaultedTask_ThrowsAnyException() + { + await Assert.ThatAsync(() => Task.FromException(new Exception("Ugh")), Throws.Exception); + } + [Test] public async Task AssertionPasses_FaultedTask_ThrowsMatchingException() {