์ด ํ ์คํธ ์ผ์ด์ค์ ๊ฒฝ์ฐ:
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
์คํ์ผ์ด ์ ๊ณตํ์ง ์๋ ์ ์ฉํ ๊ธฐ๋ฅ์ธ ์ถ๊ฐ ํ
์คํธ๋ฅผ ์ํด ์์ธ๋ฅผ ๋ฐํํฉ๋๋ค.
์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ์ต์ฐ์ ๊ณผ์ ๋ก ํ์ธํ๊ณ ํ ๋นํ์ต๋๋ค. ๋ ์ธ์คํด์ค ๋ชจ๋ TestDelegate๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋์ผํ๊ฒ ์๋ํด์ผ ํฉ๋๋ค.
Assert.That์ด ์์ธ๋ฅผ ๋ฐํํ์ง ์๋ ์ด์ ๋ ์๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ค ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค. ํธ์ถํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฉ์๋์ธ Assert.That(async () => await One(), Is.EqualTo(1)));
์ ๊ฐ์ ์ ์ฐฝํ ์ฃผ์ฅ์ ์์ฑํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋ ์ด๊ฒ์ throw ์ ์ฝ ์กฐ๊ฑด์๋ง ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ค๋ฅธ ์ ์ฝ์ด ์๋ํ๊ณ ,
``` C#
[์ํ]
๊ณต๊ฐ ๋ฌดํจ TestTheMeaningOfLife()
{
Assert.That(async() => DelayedMeaningOfLife(), Is.EqualTo(42))๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
}
์ ์ ๋น๋๊ธฐ ์์
{
๋๊ธฐ Task.Delay(TimeSpan.FromSeconds(2)).ConfigureAwait(false);
๋ฆฌํด 42;
}
```
throw ์ ์ฝ ์กฐ๊ฑด์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น? Assert.Throws
๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ํ throws ์ ์ฝ ์กฐ๊ฑด( Assert.That(..., Throws...)
)์ด ์๋ํฉ๋๋ค. ์๋ํ์ง ์๋ Assert.Throws
์
๋๋ค.
Assert.That
๊ฐ Throws
๋ํด ์๋ํ๋ค๋ฉด Is.EqualTo
๋ฐ ์น๊ตฌ์๊ฒ๋ ์๋ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
๋ด ์ค์, ๋๋ ์ด๋ค ํ ์คํธ๊ฐ ์คํจํ๋์ง ์๋ชป ์ฝ์๊ณ ์ฌ์ง์ด ์ด๋ค ํ ์คํธ๊ฐ ์คํจํ๋์ง ์๋ชป ์ฝ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ํ ๋ด ์๊ฒฌ์ด ์๋ชป๋์์ต๋๋ค. Assert.Throws๋ ๋๋ฑํ ์ ์ฝ ์กฐ๊ฑด์ ์ฐ๊ฒฐ๋์ง ์๋ ๋ช ์๋๋ ๊ณ ์ ์ ์ธ ์ฃผ์ฅ ์ค ํ๋์ ๋๋ค.
#1142๋ก ์์ ๋์์ง๋ง ๋ฌธ์ํํด์ผ ํฉ๋๋ค.
๊ฐ์ฌ ํด์.
#1142์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์์ง๋ง ์ค๋ฅ ๋ฉ์์ง("async void ๋ฉ์๋๊ฐ ์ง์๋์ง ์์ต๋๋ค")๊ฐ ๋จ์ ์์ต๋๊น, ์๋๋ฉด ๊ฐ๋ฐ์๊ฐ ๋์ Assert.ThrowsAsync
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๊น?
@yaakov-h, ์, ๋ค์ ๋ฒ์ ์ ์ถ์ํ๋ฉด Assert.ThrowsAsync๋ฅผ ๋์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ง๊ธ์ ์ ์ฐฝํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ญ์์ค.
Stackoverflow๊ฐ ์ ๋ฅผ ์ฌ๊ธฐ๋ก ๋ฐ๋ ค์์ต๋๋ค. ํ๋ฅญํ ์ผ!! NuGet์์ 3.20 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ผ๋ฉฐ Assert.ThrowsAsyc ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์์ต๋๋ค!
๋ด๊ฐ ์ฐพ๋ ๋ฐ๋ก ๊ทธ๊ฒ. ๊ฐ์ฌ ํด์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Stackoverflow๊ฐ ์ ๋ฅผ ์ฌ๊ธฐ๋ก ๋ฐ๋ ค์์ต๋๋ค. ํ๋ฅญํ ์ผ!! NuGet์์ 3.20 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ผ๋ฉฐ Assert.ThrowsAsyc ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์์ต๋๋ค!