Autofixture: ์งˆ๋ฌธ: AutoMoqCustomization์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์ฒฉ๋œ ์ข…์†์„ฑ ๋ชจ์˜ ์„ค์ •

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

AutoMoqCustomization ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์ฒฉ๋œ ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฐœ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ์ž๋™ ๋ชจ์˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Mock<IObject> ๋™๊ฒฐํ•œ ํ›„ Moq์—์„œ ์ƒ์„ฑํ•œ ๋˜ ๋‹ค๋ฅธ IObject ๊ฐ€ ๊ณ ์ • ์žฅ์น˜์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.

[TestClass]
    public class MyTestClass
    {
        [TestMethod]
        public void Test()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var objMock = fixture.Freeze<Mock<IObject>>();
            var sut = fixture.Create<Dependant2>();

            sut.Obj.Should().BeSameAs(objMock);
        }
    }

    public interface IObject { }

    public interface IDependant { IObject Obj { get; } }

    public class MyObject : IObject { }

    public class Dependant2
    {
        public Dependant2(IDependant dependant)
        {
            Obj = dependant.Obj;
        }

        public IObject Obj { get; }
    }

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

AutoMoqCustomization ๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ ์„ค์ •ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ์˜ ๋ฉค๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๋Œ€์‹  AutoConfiguredMoqCustomization ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. a) ๋ชจ์˜์˜ ๊ณต๊ฐœ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์†์„ฑ์„ ์„ค์ •ํ•˜๊ณ  b) ์กฐ๋ช…๊ธฐ์— ์˜ํ•ด ๋Š๋ฆฌ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜(๋ฐ ๋ฉ”๋ชจํ™”)ํ•˜๋„๋ก ๋ฉ”์„œ๋“œ/์ธ๋ฑ์„œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • ref ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ
  • ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ

์น˜ํŠธ ์‹œํŠธ ํ•˜๋‹จ์— ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

AutoMoqCustomization ๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ ์„ค์ •ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ์˜ ๋ฉค๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๋Œ€์‹  AutoConfiguredMoqCustomization ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. a) ๋ชจ์˜์˜ ๊ณต๊ฐœ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์†์„ฑ์„ ์„ค์ •ํ•˜๊ณ  b) ์กฐ๋ช…๊ธฐ์— ์˜ํ•ด ๋Š๋ฆฌ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜(๋ฐ ๋ฉ”๋ชจํ™”)ํ•˜๋„๋ก ๋ฉ”์„œ๋“œ/์ธ๋ฑ์„œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • ref ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ
  • ์ œ๋„ค๋ฆญ ๋ฉ”์†Œ๋“œ

์น˜ํŠธ ์‹œํŠธ ํ•˜๋‹จ์— ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‘๋‹ต์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋‚˜๋Š” ์‹œ๋„ AutoConfiguredMoqCustomization ์˜ ๋ฐฉ๋ฒ• ๋Œ€์‹  ์†์„ฑ์„ IDependant ๊ฐ€ ๋ƒ‰๋™ ์ธ์Šคํ„ด์Šค๋ฅผ ์กด์ค‘ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ์†์„ฑ๋„ ์กด์ค‘๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? Moq๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด setter๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์†์„ฑ getter๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ get-only ์†์„ฑ๋„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ AutoMoq๋ฅผ ๋ฐฉํ•ดํ•˜์—ฌ get-only ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” Moq์˜ ๋ฒ„๊ทธ๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์กฐ์‚ฌํ–ˆ์„ ๋•Œ Moq ๋ฒ„์ „ 4.2.1409.1722 ์ดํ•˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ #434 ์ฐธ์กฐ). ์ตœ์‹  ๋ฒ„์ „์˜ Moq์—์„œ ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4.2.1409.1722๋ณด๋‹ค ๋‚ฎ์€ ๊ฐ€์žฅ ๋†’์€ Moq ๋ฒ„์ „์„ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋งž์Šต๋‹ˆ๋‹ค. get-only ์†์„ฑ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Moq ๋ฒ„๊ทธ๋Š” ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์‹œ๋„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋„์›€์„ ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

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