Autofixture: ์„ ํƒ์ ์œผ๋กœ AutoMoq์— ๋Œ€ํ•œ ์บ์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 05์›” 20์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AutoFixture/AutoFixture

AutoConfiguredMoqCustomization์„ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋œ ํ”ฝ์Šค์ฒ˜์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์ด ์บ์‹œ๋˜๊ณ  ๊ฐ ํ˜ธ์ถœ๋งˆ๋‹ค ๋™์ผํ•œ ๊ฐ’์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค(์ด ์ž‘์—…์ด MockType.ReturnsUsingContext์—์„œ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ๋˜๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ด…๋‹ˆ๋‹ค. 104๋ฒˆ ์ค„์— ์žˆ์Œ).

์žฌ์ •์˜ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น ๋ชจ์˜์˜ Frozen ์ธ์Šคํ„ด์Šค๋ฅผ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•˜๊ณ  ๊ณ ์ • ์žฅ์น˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” func๋กœ ์„ค์ •์„ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

someMock.Setup(it => it.SomeMethodReturningAString()).Returns(() => fixture.Create<string>())

๊ฐ ํ˜ธ์ถœ์„ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ ์™ธ์— AutoFixture์—์„œ ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์กฐ๋ช…๊ธฐ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์ž๋™ ์ƒ์„ฑ๋œ ๋ชจ์˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋” ์ผ๋ฐ˜์ ์ด๊ณ  ์Šค๋งˆํŠธํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

enhancement good first issue

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

ํ…Œ์ŠคํŠธ ๋”๋ธ”์ด ๋ฐ˜ํ™˜ ๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด AutoFixture๋กœ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. AutoFixture์—๋Š” ์ด๋ฏธ ์ˆ˜๋ช… ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์œผ๋ฏ€๋กœ(์ •์ง€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด) AutoConfiguredMoqCustomization ๊ฐ€ ์ž์ฒด ์ˆ˜๋ช… ๊ด€๋ฆฌ์ž๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ AutoFixture ์ž์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ปจํŠธ๋กค ํ‘œ๋ฉด์„ ๋ฌด์‹œํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

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

๊ฒฐ๊ณผ ๊ฐ’์„ ์บ์‹ฑํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ _pure_ ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด

ํ…Œ์ŠคํŠธ ์ค‘์ธ ์‹œ์Šคํ…œ์ด ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์˜ˆ์ƒํ•˜์ง€๋งŒ ์ˆœ์ˆ˜ํ•˜์ง€ ์•Š์€ ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋˜๋ฉด ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๊ฑฐ์ง“ ์–‘์„ฑ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ

// This method will return the expected result *if* `GetInt` is pure.
int Double(IDependency dep) {
    return dep.GetInt() + dep.GetInt();
}

Assert.Equal(dep.GetInt * 2, Double(dep));

๋ฐ˜๋ฉด์— ํ…Œ์ŠคํŠธ ์ค‘์ธ ์‹œ์Šคํ…œ์ด ์ˆœ๋„๋ฅผ ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ˆœ์ˆ˜ ๋˜๋Š” ๋ถˆ์ˆœํ•œ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•ด๋„ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ํ˜ธ์ถœ์„ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ ์™ธ์— AutoFixture์—์„œ ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์กฐ๋ช…๊ธฐ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์ž๋™ ์ƒ์„ฑ๋œ ๋ชจ์˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋” ์ผ๋ฐ˜์ ์ด๊ณ  ์Šค๋งˆํŠธํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

_one_ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ IConfiguration ๋„ฃ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ์—์„œ ๋ชจ๋“  ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์กฐ๊ธˆ ๋” ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ReturnsUsingContext ์˜ ์ƒˆ ๊ตฌํ˜„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(IIRC, ํ˜„์žฌ ๊ตฌํ˜„์„ ๋ณต์‚ฌํ•˜๊ณ  104ํ–‰์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค).
  • MockVirtualMethodsCommand ์žฌ์ •์˜ํ•˜๊ณ  ReturnsUsingContext ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ƒˆ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ํ˜ธ์ถœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • AutoConfiguredMoqCustomization ์žฌ์ •์˜ํ•˜๊ณ  MockVirtualMethodsCommand ์˜ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ์ƒˆ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™”๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ๋™์ž‘์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋ฅผ ์ •๋‹นํ™”ํ•  ๋งŒํผ ์ˆ˜์š”๊ฐ€ ๋†’์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์„ ๊ฐ€๋ณ๊ฒŒ ์—ฌ๊ฒจ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์„ธ๋ถ„ํ™”๋œ ์‚ฌ์šฉ์ž ์ง€์ •์€ ์šฐ๋ฐœ์ ์ธ ๋ณต์žก์„ฑ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @ploeh , ์ด์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

ํ…Œ์ŠคํŠธ ๋”๋ธ”์ด ๋ฐ˜ํ™˜ ๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด AutoFixture๋กœ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. AutoFixture์—๋Š” ์ด๋ฏธ ์ˆ˜๋ช… ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์œผ๋ฏ€๋กœ(์ •์ง€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด) AutoConfiguredMoqCustomization ๊ฐ€ ์ž์ฒด ์ˆ˜๋ช… ๊ด€๋ฆฌ์ž๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ AutoFixture ์ž์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ปจํŠธ๋กค ํ‘œ๋ฉด์„ ๋ฌด์‹œํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

์•„์ฃผ ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. Freeze ๋Œ€ํ•ด ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ƒ๊ฐํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด์ œ ์‚ฌ์šฉ์ž ์ •์˜์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ํš๊ธฐ์ ์ธ ๋ณ€๊ฒฝ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š”... AutoFixture v4์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

ํ…Œ์ŠคํŠธ์—์„œ ๋ฌธ์„œํ™”ํ–ˆ๊ฑฐ๋‚˜ ์–ด๋–ป๊ฒŒ๋“  '์•ฝ์†'ํ•œ ๋™์ž‘์ž…๋‹ˆ๊นŒ?

๋†€๋ž๊ฒŒ๋„, ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ๋ฎ์—ˆ๋‹ค๊ณ  ๊ฝค ํ™•์‹ ํ–ˆ์ง€๋งŒ, ๋‚˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค. ์ ์–ด๋„ ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ค๋ฃจ๋Š” ์–ด๋–ค ํ…Œ์ŠคํŠธ๋„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ณ , ๊ทธ ๋ผ์ธ์„ ์ œ๊ฑฐํ•ด๋„ ์–ด๋–ค ํ…Œ์ŠคํŠธ๋„ ์‹คํŒจํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ IMO๋Š” ์—ฌ์ „ํžˆ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๋™์ž‘์ด๋ฉฐ ์ด์— ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

๊ณต์ •ํ•œ ํฌ์ธํŠธ. ์ง€๊ธˆ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ ๋‹ค์Œ AutoFixture 4๋กœ ์ „ํ™˜ํ•  ๋•Œ ์ „ํ™˜ํ•˜๋Š” ๊ตฌ์„ฑ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋™์˜. ์ด๋Ÿฌํ•œ ๋งฅ๋ฝ์—์„œ "๊ตฌ์„ฑ ๊ฐ’"์€ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? MockType ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ const๋กœ ๋“ค์–ด ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ: private const bool cacheReturnValues = true ๋‹ค์Œ if(cacheReturnValues) /**/

๊ทธ๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ์ผํšŒ์šฉ ๋Œ“๊ธ€์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋„ˆ๋ฌด ๋งŽ์€ ๋ณ€๊ฒฝ ์—†์ด๋Š” ์‹ค์ œ๋กœ ๊ฐ€๋Šฅํ–ˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์˜๋ฏธํ•œ ๋ฐ”๋Š” ์ด๋žฌ์Šต๋‹ˆ๋‹ค.

@andreasnilsen ์€ ์ง€๊ธˆ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ด๊ฒƒ์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋งŒ๋“ค๋ฉด @andreasnilsen ์—๊ฒŒ ์ง€๊ธˆ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ  ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋Š” ์ค‘๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

AutoFixture 4๋ฅผ ๋„์ž…ํ•  ๋•Œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ธฐ๋ณธ ๋™์ž‘์ด ๋ฐ˜ํ™˜ ๊ฐ’์ด ์บ์‹œ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋‹จ์ˆœํžˆ ํ•ด๋‹น ์˜ต์…˜์„ ์ œ๊ฑฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค...

๋ถ€์šธ cacheReturnValues ์™€ ๊ฐ™์€ ๊ฒƒ์ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•˜๋ฏ€๋กœ private ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

(์šฐ๋ฆฌ๋Š” ์ •ํ™•ํžˆ ๋‘ ๊ฐœ์˜ ๊ฐ’์ด์žˆ์„ ๊ฑฐ๋ผ๋Š” ํ™•์‹  ์•„๋‹ˆ๋ผ๋ฉด ๋˜ํ•œ, ์šฐ๋ฆฌ๋Š” ๊ณ ๋ คํ•ด์•ผ enum ๋Œ€์‹ ์˜ bool .)

์•„, ์ฒ˜์Œ์—๋Š” v4์—์„œ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์šด ๋‚ด๋ถ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์Œ์— ์˜ค๋Š” ์ฒ˜์Œ ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • AutoConfiguredMoqCustomization ์˜ ์ƒ์„ฑ์ž์— ๋ถ€์šธ ๋งค๊ฐœ๋ณ€์ˆ˜(์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์„ ํƒ์‚ฌํ•ญ)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ MockVirtualMethodsCommand ํ•˜๋ฉด MockType.ReturnsUsingContext ๋กœ ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ณด์ธ๋‹ค:

    1. ์•ฝ๊ฐ„ ๋ณต์žกํ•˜๊ณ 

    2. ๋„ˆ๋ฌด _์ž„์‹œ_. ์‚ฌ์šฉ์ž ์ •์˜์— ๋” ๋งŽ์€ ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ƒ์„ฑ์ž๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ณ  ์‚ฌ์šฉ/์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

  • ์œ„์˜ (ii) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ฒด ํŒจํ„ด ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ›„ํšŒํ•˜๊ณ  ๋‚˜์ค‘์— ๊ณ ์ฐฉ๋  ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์„ ๊ฒฝ๊ณ„ํ•˜๋ฏ€๋กœ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ท€ํ•˜์˜ ์ „๋ฌธ ์ง€์‹/๊ฒฝํ—˜์„ ๋†’์ด ํ‰๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „๋žต ๊ฐ™์€ ๊ฑธ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ...

์•„ ๋ฌผ๋ก ์ด์ฃ ! "๊ตฌ์„ฑ ๊ฐ’"์— ์ง‘์ฐฉํ•˜๊ณ  ํ•œ ๊ฑธ์Œ ๋ฌผ๋Ÿฌ๋‚˜๋Š” ๊ฒƒ์„ ์žŠ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ต๋ณ€์ด ๋Šฆ์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ •์‹ ์ด ๋ฉํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ณง ์‚ดํŽด๋ณด๊ณ  ๋””์ž์ธ ์ œ์•ˆ์„œ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์กฐ์ •์„ ์œ„ํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ์žฌ์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ์–ด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋” ๋‚˜์€ ์„ค์ • ์ด๋ฆ„ ์ฐพ๊ธฐ).
c# new AutoMoqCustomization { CacheCallResults = false }

๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์œ„์—์„œ ์กฐ์–ธํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ „๋žต์„ ํ†ตํ•ด ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋น„๊ต์  ๊ฐ„๋‹จํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํƒœ๊ทธ์—์„œ ์ ํ”„๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

@zvirja ๊ฐ€ ์ €๋ฅผ ์กฐ๊ธˆ ๋„์™€ ์žˆ๋‚˜์š”? ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค :)

@micheleissa ๊ด€์‹ฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! AutoMoq ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์•„์ฃผ ์ž‘์•„์„œ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ์ง€๋Š” ์•Š์„ํ…๋ฐ...

๋” ๊ตฌ์ฒด์ ์ธ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ์งˆ๋ฌธํ•˜์‹ญ์‹œ์˜ค ๐Ÿ˜‰

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