Autofixture: dotnet core 3.0 - Microsoft.AspNetCore.Mvc.ModelBinding.BindingInfo์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 09์›” 26์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AutoFixture/AutoFixture

์ €๋Š” ํ˜„์žฌ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ 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.IList 1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor] Parameters System.Collections.Generic.IList 1[Microsoft.AspNetCore.Mvc.Abstractions.ParameterDescriptor]
System.Collections.Generic.List 1[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'๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋งค๊ฐœ๋ณ€์ˆ˜ '๊ฐ’')

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

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹ซํ˜€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ Xunit์„ _์•„๋ŸฐํŠธ_ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋น ๋ฅธ (๊ฒŒ์œผ๋ฅธ) ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Fixture.Customize<BindingInfo>(c => c.OmitAutoProperties()); -- ํ•„์š”ํ•œ ๊ฒฝ์šฐ bindingInfo๋ฅผ ์ˆ˜์ •ํ•˜๋Š” _๋˜ํ•œ_ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ์—์„œ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ...

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

@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() ;

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