Autofixture: AutoFixture๋ฅผ ์ •์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ

์— ๋งŒ๋“  2013๋…„ 08์›” 28์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AutoFixture/AutoFixture

[๊ฐœ์„  ์š”์ฒญ์ž…๋‹ˆ๋‹ค]

์šฐ๋ฆฌ๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Fixture.Create();

Fixture๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๋Œ€์‹ 
var ๊ณ ์ • ์žฅ์น˜ = new Fixture();
Fixture.Create();

autofixture์˜ NDC์—์„œ์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์—์„œ ๋‹น์‹ ์€ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์ด ๋” ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์‹ ์˜ ์•„์ด๋””์–ด๋ฅผ ๋”ฐ๋ž์ง€๋งŒ ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๊ฐ ๋ฐฉ๋ฒ•์—์„œ ์ƒˆ Fixture๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์žˆ๊ณ  ์‹ค์ œ๋กœ ํŒฌ์ด ์•„๋‹™๋‹ˆ๋‹ค. Fixture.Create๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.();

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด ?

์˜ˆ, ์ €๋Š” ์„ ์–ธ์  ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ICustomize๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ƒˆ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ด๋ ฌํ•œ ํŒฌ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋ณผ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์„ค์ •๋˜๋Š”์ง€ ๋ณด๋ ค๋ฉด ํด๋ž˜์Šค๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์„œ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ICustomize๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

6๊ฐœ์˜ ํ‚ค ์ž…๋ ฅ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„

``` C#
var foo = Fixture.Create();

provide any advantage that

``` c#
var foo = new Fixture().Create<Foo>();

๊ทธ๋ ‡์ง€ ์•Š์•„?

์ถ”๊ฐ€ ํ‚ค ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” Visual Studio ์ฝ”๋“œ ์กฐ๊ฐ ์„ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mark๋‹˜, ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ฝ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

Fixture.Create();
Fixture.Build();

~๋ณด๋‹ค

์ƒˆ๋กœ์šด Fixture().Create();
์ƒˆ๋กœ์šด Fixture().Build();

์ด๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ํ–ฅ์ƒ์ด์ง€๋งŒ autofixture๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‚ด ์‹ฌ์žฅ์ด ํ›จ์”ฌ ๋” ๋›ฐ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿด ์ˆ˜ ์žˆ์ง€. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€๋…์„ฑ์€ ์ฃผ๊ด€์ ์ž…๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝํ—˜์ƒ, ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์—์„œ ์‚ฌ๋žŒ๋“ค์€ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๋˜๋Š” ์‚ฌ์šฉํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชจ๋“  ์ž‘์€ ๋‹จ์ ์„ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด Fixture ์ธ์Šคํ„ด์Šค๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์‚ฌ์šฉ์ž ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (IIRC) ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ํŠน์ • ๋ถ€๋ถ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ๋ฐ”๋‹๋ผ Fixture ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ASP.NET MVC ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€์ƒ์˜ Fixture.Create<T>() ๋ฐฉ๋ฒ•์ด ์ผ๋ฐ˜ ๊ธฐ๋ณธ Fixture ์ธ์Šคํ„ด์Šค์—์„œ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์œ ์šฉ์„ฑ์ด ์ œํ•œ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ AutoFixture๋ฅผ ์ทจํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฉํ–ฅ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ด ์ œ์•ˆ์„ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฌํ•œ ๋ž˜ํผ๋ฅผ ์ง์ ‘ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ƒˆ๋กœ์šด Fixture()๋ฅผ ์œ ์ง€ํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด์— ์ถ”๊ฐ€ ์ •์  ๋‹จ์ถ•ํ‚ค(๊ฐœ์ธ ์ •์  ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ)๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ž˜ํผ๋‚˜ ํ™•์žฅ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ(์˜ˆ: ๋„ค์ž„์ŠคํŽ˜์ด์Šค) ๊ด€๋ฆฌํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ ํ”„๋กœ์ ํŠธ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š”,

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