์ ๋ ํ์ฌ ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ dotnet core 3์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ณผ์ ์ ์์ต๋๋ค. ์ด ํ๋ก์ ํธ์๋ AutoFixture ๋ฐ xunit2๋ฅผ ์ฌ์ฉํ๋ ์ปจํธ๋กค๋ฌ/api ๊ณ์ธต์ ๋ํ ๋ค์์ ๋จ์ ํ ์คํธ๊ฐ ์์ต๋๋ค.
์ ๊ทธ๋ ์ด๋ ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ๋ ค๋ ์๋ ๊ณ ์ ์ฅ์น ํ ์คํธ๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค. ๋ค์ ์์ธ์ ํจ๊ป ์คํจํฉ๋๋ค.
AutoFixture.ObjectCreationExceptionWithPath: ์์ธ๋ก ์ธํด ์์ฑ์ด ์๊ธฐ์น ์๊ฒ ์คํจํ๊ธฐ ๋๋ฌธ์ AutoFixture๊ฐ Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ด๋ถ ์์ธ๋ฅผ ์ฐธ์กฐํ์ฌ ์คํจ์ ๊ทผ๋ณธ ์์ธ์ ์กฐ์ฌํ์ญ์์ค.
์์ฒญ ๊ฒฝ๋ก:
*.Inventory.Api.Controllers.ProductCategoriesController ์ปจํธ๋กค๋ฌ* .Inventory.Api.Controllers.ProductCategoriesController
Microsoft.AspNetCore.Mvc.ControllerContext ์ปจํธ๋กค๋ฌ ์ปจํ ์คํธ
Microsoft.AspNetCore.Mvc.ControllerContext
Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor ์์ ์ค๋ช ์
Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor
System.Collections.Generic.IList1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] Parameters System.Collections.Generic.IList
1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
System.Collections.Generic.List1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] System.Collections.Generic.IEnumerable
1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] ์ปฌ๋ ์
System.Collections.Generic.IEnumerable`1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor
Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo ๋ฐ์ธ๋ฉ ์ ๋ณด
Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo
๋ด๋ถ ์์ธ ๋ฉ์์ง:
System.Reflection.TargetInvocationException: ํธ์ถ ๋์์์ ์์ธ๊ฐ ๋ฐ์ํ์ต๋๋ค.
System.ArgumentException: 'System.Object' ํ์์ ๋ชจ๋ธ ๋ฐ์ธ๋๋ก ์ฌ์ฉํ 'Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinder'๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค. (๋งค๊ฐ๋ณ์ '๊ฐ')
@TroyHouston ๋๋์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค. ์ปจํธ๋กค๋ฌ์์ [Greedy] ์์ฑ์ ์ฌ์ฉํ์ฌ ์์ ํ์ต๋๋ค.
์ ๋ ๋๋์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค :)
@Fjsmoreira ๊ฐ์ฌํฉ๋๋ค! ๊ทธ๊ฒ์ ๋ํ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค :)
์ด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง [ํ์์ค๋ฌ์ด] ์์ฑ์ด ์ด๋์์ ์๋์ง ์ดํดํ๋ ๋ฐ ๋์์ด ํ์ํฉ๋๋ค. @Fjsmoreira ๋๋ @TroyHouston , [Greedy] ์์ฑ์ ์ป์ผ๋ ค๋ฉด ์ด๋ค ํจํค์ง/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?
์ด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง [ํ์์ค๋ฌ์ด] ์์ฑ์ด ์ด๋์์ ์๋์ง ์ดํดํ๋ ๋ฐ ๋์์ด ํ์ํฉ๋๋ค. @Fjsmoreira ๋๋ @TroyHouston , [Greedy] ์์ฑ์ ์ป์ผ๋ ค๋ฉด ์ด๋ค ํจํค์ง/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?
๊ด์ฐฎ์์. ์์๋์ด! AutoFixture.Xunit ํจํค์ง์ ์ผ๋ถ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ๋ซํ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง Xunit์ _์๋ฐํธ_ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํด ๋น ๋ฅธ (๊ฒ์ผ๋ฅธ) ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์์ ์ํํ๋ ๊ฒ์ ๋๋ค.
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- ํ์ํ ๊ฒฝ์ฐ bindingInfo๋ฅผ ์์ ํ๋ _๋ํ_ ๋ฐฉ๋ฒ์ด ์์ง๋ง ํ
์คํธ์์ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ...
OmitAutoProperties
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
var controller = fixture.Build<SomeController>().OmitAutoProperties().Create()
;
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ด๊ฒ์ด ๋ซํ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง Xunit์ _์๋ฐํธ_ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํด ๋น ๋ฅธ (๊ฒ์ผ๋ฅธ) ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์์ ์ํํ๋ ๊ฒ์ ๋๋ค.
Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties());
-- ํ์ํ ๊ฒฝ์ฐ bindingInfo๋ฅผ ์์ ํ๋ _๋ํ_ ๋ฐฉ๋ฒ์ด ์์ง๋ง ํ ์คํธ์์ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ...