Nunit: Assert.Throws async рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЬрдире░ 2016  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: nunit/nunit

рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде:

using System;
using System.Threading.Tasks;
using NUnit.Framework;

namespace NUnitAsync
{
    [TestFixture]
    public class Class1
    {
        [Test]
        public void MyAsyncThingTest()
        {
            var ioe = Assert.Throws<InvalidOperationException>(async () => await DelayedFailureAsync());
            Assert.That(ioe.Message, Is.EqualTo("ABC"));
        }

        [Test]
        public void MyAsyncThingFluentTest()
        {
            Assert.That(async () => await DelayedFailureAsync(), Throws.Exception.TypeOf<InvalidOperationException>().And.Message.EqualTo("ABC"));
        }

        static async Task DelayedFailureAsync()
        {
            await Task.Delay(TimeSpan.FromSeconds(2)).ConfigureAwait(false);
            throw new InvalidOperationException("ABC");
        }
    }
}

:negative_squared_cross_mark: MyAsyncThingTest рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

Test Name:  MyAsyncThingTest
Test FullName:  NUnitAsync.Class1.MyAsyncThingTest
Test Source:    C:\Temp\NUnitAsync\NUnitAsync\Class1.cs : line 15
Test Outcome:   Failed
Test Duration:  0:00:00.004

Result StackTrace:  
at NUnit.Framework.Internal.AsyncInvocationRegion.Create(MethodInfo method)
   at NUnit.Framework.Assert.Throws(IResolveConstraint expression, TestDelegate code, String message, Object[] args)
   at NUnit.Framework.Assert.Throws[TActual](TestDelegate code, String message, Object[] args)
   at NUnit.Framework.Assert.Throws[TActual](TestDelegate code)
   at NUnitAsync.Class1.MyAsyncThingTest() in C:\Temp\NUnitAsync\NUnitAsync\Class1.cs:line 16
Result Message: System.ArgumentException : 'async void' methods are not supported, please use 'async Task' instead

:white_check_mark: MyAsyncThingFluentTest рдЧреБрдЬрд░рддрд╛ рд╣реИред

рдЕрдВрддрд░ рдХреНрдпреЛрдВ? Assert.Throws рдЖрдЧреЗ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ Assert.That рд╢реИрд▓реА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдореБрдЭреЗ рдпрд╣рд╛рдВ рд▓реЗ рдЖрдпрд╛ред рдорд╣рд╛рди рдХрд╛рдо!! рдореИрдВрдиреЗ NuGet рдореЗрдВ 3.20 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ Assert.ThrowsAsyc рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛!

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рд╣реИред рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рдЯреЗрд╕реНрдЯрдбрд┐рд▓реЗрдЧреЗрдЯ рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпреЛрдВ Assert.рдпрд╣ рдЕрдкрд╡рд╛рдж рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕ рдмрд╛рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред Assert.That(async () => await One(), Is.EqualTo(1))); рдЬреИрд╕реЗ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЕрднрд┐рдХрдерди рд▓рд┐рдЦрдирд╛ рдЖрдо рдмрд╛рдд рд╣реИ рдЬреЛ рд╡рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдереНрд░реЛ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рдЕрдиреНрдп рдмрд╛рдзрд╛рдПрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ,

``` рд╕реА#
[рдкрд░реАрдХреНрд╖рдг]
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдкрд░реАрдХреНрд╖рдг TheMeaningOfLife ()
{
Assert.that (async () => рдкреНрд░рддреАрдХреНрд╖рд┐рдд DelayedMeaningOfLife (), Is.EqualTo(42));
}

рд╕реНрдерд┐рд░ async рдХрд╛рд░реНрдпрд╡рд┐рд▓рдВрдмрд┐рдд рдЕрд░реНрдердСрдлрд▓рд╛рдЗрдл ()
{
рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛рд░реНрдпред рд╡рд┐рд▓рдВрдм (рдЯрд╛рдЗрдорд╕реНрдкреЗрдиред рд╕реЗрдХреЗрдВрдб рд╕реЗ (2))ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ (рдЭреВрдард╛);
рд╡рд╛рдкрд╕реА 42;
}
```

рдереНрд░реЛ рдмрд╛рдзрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЬрдм рддрдХ Assert.Throws рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рддрдм рддрдХ рдереНрд░реЛ рдмрд╛рдзрд╛ ( Assert.That(..., Throws...) ) рдХрд╛рдо рдХрд░рддреА рд╣реИред рдпрд╣ Assert.Throws рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдЧрд░ Assert.That Throws рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ Is.EqualTo рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореЗрд░реА рдЧрд▓рддреА, рдореИрдВрдиреЗ рдЧрд▓рдд рдкрдврд╝рд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ рднреА рдЧрд▓рдд рдерд╛ рдХрд┐ рдореЗрд░рд╛ рдХреМрди рд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рддреЛ рдмрд╛рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдЧрд▓рдд рд╣реИред Assert.Throws рдЙрди рдХреБрдЫ рдХреНрд▓рд╛рд╕рд┐рдХ рдЕрднрд┐рдХрдердиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рд╕рдордХрдХреНрд╖ рдмрд╛рдзрд╛ рдХреЗ рд▓рд┐рдП рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рдирд╣реАрдВ рд╣реИред

#1142 рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ #1142 рдореЗрдВ рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ ("async рд╢реВрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ") рдмрдиреА рд░рд╣рддреА рд╣реИрдВ, рдпрд╛ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Assert.ThrowsAsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@ рдпрд╛рдХреЛрд╡-рдПрдЪ, рд╣рд╛рдБ, рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЕрдЧрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Assert.ThrowsAsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдореБрдЭреЗ рдпрд╣рд╛рдВ рд▓реЗ рдЖрдпрд╛ред рдорд╣рд╛рди рдХрд╛рдо!! рдореИрдВрдиреЗ NuGet рдореЗрдВ 3.20 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ Assert.ThrowsAsyc рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛!

рдореБрдЭреЗ рдЗрд╕рдХреА рд╣реА рдЦреЛрдЬ рдереАред рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

TobiasSekan picture TobiasSekan  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ChrisMaddock picture ChrisMaddock  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fluffynuts picture fluffynuts  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

UyttenhoveSimon picture UyttenhoveSimon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jnm2 picture jnm2  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ