Nunit: Assert.Throws๋Š” ๋น„๋™๊ธฐ ๋Œ€๋ฆฌ์ž์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 01์›” 12์ผ  ยท  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 ์Šคํƒ€์ผ์ด ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ธ ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

duplicate

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Stackoverflow๊ฐ€ ์ €๋ฅผ ์—ฌ๊ธฐ๋กœ ๋ฐ๋ ค์™”์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ์ผ!! NuGet์—์„œ 3.20 ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์œผ๋ฉฐ Assert.ThrowsAsyc ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!

๋ชจ๋“  9 ๋Œ“๊ธ€

์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ตœ์šฐ์„  ๊ณผ์ œ๋กœ ํ™•์ธํ•˜๊ณ  ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์ธ์Šคํ„ด์Šค ๋ชจ๋‘ TestDelegate๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Assert.That์ด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์„œ๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์–ด๋–ค ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ• ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ์ธ Assert.That(async () => await One(), Is.EqualTo(1))); ์™€ ๊ฐ™์€ ์œ ์ฐฝํ•œ ์ฃผ์žฅ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์ด๊ฒƒ์€ throw ์ œ์•ฝ ์กฐ๊ฑด์—๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ œ์•ฝ์ด ์ž‘๋™ํ•˜๊ณ ,

``` C#
[์‹œํ—˜]
๊ณต๊ฐœ ๋ฌดํšจ TestTheMeaningOfLife()
{
Assert.That(async() => DelayedMeaningOfLife(), Is.EqualTo(42))๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
}

์ •์  ๋น„๋™๊ธฐ ์ž‘์—…DelayedMeaningOfLife()
{
๋Œ€๊ธฐ 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 ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!

๋‚ด๊ฐ€ ์ฐพ๋˜ ๋ฐ”๋กœ ๊ทธ๊ฒƒ. ๊ฐ์‚ฌ ํ•ด์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰