Autofixture: ์ œ๋„ค๋ฆญ์ด ์•„๋‹Œ Create(Type) ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

์— ๋งŒ๋“  2015๋…„ 11์›” 19์ผ  ยท  2์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AutoFixture/AutoFixture

๋‚˜๋Š” (ab) Autofixture๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Web API์— ๋Œ€ํ•œ ๋ฌธ์„œ ์˜ˆ์ œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Autofixture๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์‹œ์ง€(๋ช…๋ น ๋ฐ ์ฟผ๋ฆฌ)๋Š” JSON์œผ๋กœ ์ง๋ ฌํ™”๋˜๊ณ  ๋ฌธ์„œ์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. Web API์šฉ VS ํ…œํ”Œ๋ฆฟ์ด /HelpPage ์˜์—ญ์—์„œ ์ƒ์„ฑํ•˜๋Š” ์ˆ˜๋ฐฑ ์ค„์˜ ์ถ”์•…ํ•œ ์ฝ”๋“œ์— ๋น„ํ•ด ์ด๊ฒƒ์€ ์ •๋ง ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

``` C#
๊ฐœ์ธ ์ •์  ์ฝ๊ธฐ ์ „์šฉ MethodInfo CreateMethodInfo =
GetMethod(() => SpecimenFactory.Create(์ƒˆ๋กœ์šด ์„ค๋น„()))
.GetGenericMethodDefinition();

๊ณต์šฉ ์ •์  ๊ฐ์ฒด ์ƒ์„ฑ(์œ ํ˜• ์œ ํ˜•)
{
var ๊ณ ์ • ์žฅ์น˜ = new Fixture();
์ •์ˆ˜ ์ธ๋ฑ์Šค = 1;
Fixture.Register(() => "์ƒ˜ํ”Œ ํ…์ŠคํŠธ" + index++);

return CreateMethodInfo.MakeGenericMethod(type).Invoke(null, new object[] { fixture });

}

private static MethodInfo GetMethod(์‹> ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ) =>
((MethodCallExpression)methodCall.Body).Method;
```

์ปดํŒŒ์ผ ์‹œ ์ •ํ™•ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Autofixture์˜ Fixture.Create<T>() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํ˜„์žฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์€ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ผ๋ฐ˜ Create<T> ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ด ์•„๋‹Œ Create(Type) ๋ฉ”์„œ๋“œ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

์ด ์†”๋ฃจ์…˜์ด ํšจ๊ณผ๊ฐ€ ์žˆ์„๊นŒ์š”?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

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

์ด ์†”๋ฃจ์…˜์ด ํšจ๊ณผ๊ฐ€ ์žˆ์„๊นŒ์š”?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

๋ฉ‹์žˆ๋Š”! ๊ทธ๊ฒƒ์€ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค! ๊ฐ์‚ฌ ํ•ด์š”.

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