Autofixture: AutoMoqData рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЖрдВрддрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рдирдорд╕реНрддреЗ,

рдореИрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП AutoMoqData рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЖрдВрддрд░рд┐рдХ рдореЙрдХрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ

[Theory, AutoMoqData]
public void Dummy(IFixture fixture, ComplexClassWithInnerInterface sut)
{
    fixture.GetInstance<IInnerInterfaceMockCreatedByAutoMoqData>().Setup(x => x.Method).Result(something);

    Assert.Equal(String.Empty, String.Empty);
}

рдзрдиреНрдпрд╡рд╛рдж

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдорд╣рд╛рди рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @xlecoustillier ред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд╣реА рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди 30 рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд░рдЦрдирд╛ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИред

рдЦреИрд░, рдпрд╣ рддрд░реНрдХ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдкрд░рд┐рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 30 рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ЁЯШЯ рдореИрдВ 99% рд╣реВрдВ @ploeh рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдЧрд╛, рдЙрдирдХреА рд╕рд▓рд╛рд╣ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдЕрдзрд┐рдХрддрдо 3-4 рдирд┐рд░реНрднрд░рддрд╛рдПрдБ

рддреЛ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдСрдЯреЛ рдирд┐рд░реНрдорд┐рдд рдореЛрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ GetInstance рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдСрдЯреЛ рдмрдирд╛рдП рдЧрдП рдореЛрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкреВрд░реЗ рд╕рдВрджреЗрд╢ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЛ рдорд┐рд▓рд╛ рд╣реИ рдЙрд╕рд╕реЗ рдЖрдк рд╕рд╣реА рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдЙрддреНрдкрдиреНрди рд╡рд╕реНрддреБрдПрдБ рдХреНрд╖рдгрд┐рдХ рд╣реЛрддреА рд╣реИрдВ рдФрд░ fixture рдЙрдиреНрд╣реЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБ рдХреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ fixture.Freeze<>() API рдпрд╛ [Frozen] рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреБрдХреНрдд API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореМрдЬреВрджрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рдкреНрд░рддрд┐ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП _рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ_ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдкрдиреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдмреЗрд╣рддрд░, рд╡рд░реНрддрдорд╛рди рд╕реАрдорд╛рдУрдВ рдФрд░ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЬреЛ рдмреЗрд╣рддрд░ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛

рдзрдиреНрдпрд╡рд╛рджред

рд╕рднреА 8 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреНрд░рдпрддреНрди

Mock.Get(sut).Setup(x => x.Method).Result(something);

рдЖрдкрдХреЛ рдореЛрдХ рджреНрд╡рд╛рд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХреНрд╕реЗрд╕рд┐рдВрдЧ рд╕реВрдЯред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╣реИред
Mock.Get(sut.InnerInterface).Setup(x => x.Method).Result(something);

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, IoC рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ?

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдХрд▓реА рдлреНрд░реАрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рднреА рд╕реВрдЯ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

[Theory, AutoMoqData]
public void Dummy(
    IFixture fixture, 
    [Frozen]Mock<YourInnerInterface> innerInterfaceMock,
    ComplexClassWithInnerInterface sut)
{
    innerInterfaceMock.Setup(x => x.Method).Result(something);
    sut.DoSomething();
    Assert.Equal(String.Empty, String.Empty);
}

рд╕рдЯ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рдЬрдореЗ рд╣реБрдП рдореЛрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рддрд╛рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реЛрдВ рдЬрдм рд╕реВрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдкреНрд▓реЛрдПрд╣ рдХрд╛ рдмреНрд▓реЙрдЧ рджреЗрдЦреЗрдВред

рдирдорд╕реНрддреЗ,
рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди 30 рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд░рдЦрдирд╛ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИред
рдЖрдкрдХреЗ рдХреЛрдб рдиреЗ рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдпрд╛ рдХрд┐ AutoMoqData рд╕рднреА рдирдХрд▓реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддреЛ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдСрдЯреЛ рдирд┐рд░реНрдорд┐рдд рдореЛрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ GetInstance рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдСрдЯреЛ рдмрдирд╛рдП рдЧрдП рдореЛрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдирдХрд▓реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдирдХрд▓реА рдЬрдорд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рд╡рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рдмрд╛рдж рдореЗрдВ рдЬрдореЗ рд╣реБрдП рдореЛрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕реВрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реЛрдЧрд╛ред рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдореЗрдВ IFixture, рдлреНрд░реАрдЬ рдФрд░ рд╕реЗрдЯрдЕрдк рдореЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП AutoMoqData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдлрд┐рд░ sut рдмрдирд╛рдПрдВред рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдореИрдВ рдореЛрдХреНрд╕ рдХреЛ рдлреНрд░реАрдЬ рдФрд░ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж

рдорд╣рд╛рди рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @xlecoustillier ред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд╣реА рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди 30 рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд░рдЦрдирд╛ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИред

рдЦреИрд░, рдпрд╣ рддрд░реНрдХ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж, рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдкрд░рд┐рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 30 рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ЁЯШЯ рдореИрдВ 99% рд╣реВрдВ @ploeh рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдЧрд╛, рдЙрдирдХреА рд╕рд▓рд╛рд╣ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдЕрдзрд┐рдХрддрдо 3-4 рдирд┐рд░реНрднрд░рддрд╛рдПрдБ

рддреЛ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдСрдЯреЛ рдирд┐рд░реНрдорд┐рдд рдореЛрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ GetInstance рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдСрдЯреЛ рдмрдирд╛рдП рдЧрдП рдореЛрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкреВрд░реЗ рд╕рдВрджреЗрд╢ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЛ рдорд┐рд▓рд╛ рд╣реИ рдЙрд╕рд╕реЗ рдЖрдк рд╕рд╣реА рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдЙрддреНрдкрдиреНрди рд╡рд╕реНрддреБрдПрдБ рдХреНрд╖рдгрд┐рдХ рд╣реЛрддреА рд╣реИрдВ рдФрд░ fixture рдЙрдиреНрд╣реЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБ рдХреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ fixture.Freeze<>() API рдпрд╛ [Frozen] рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреБрдХреНрдд API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореМрдЬреВрджрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рдкреНрд░рддрд┐ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП _рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ_ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдкрдиреА рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдмреЗрд╣рддрд░, рд╡рд░реНрддрдорд╛рди рд╕реАрдорд╛рдУрдВ рдФрд░ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЬреЛ рдмреЗрд╣рддрд░ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛

рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рдВ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ 30 рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИрдВред

рдЗрдВрдЬреЗрдХреНрд╢рди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, [Frozen] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬреИрд╕рд╛ рдХрд┐ @xlecoustillier рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реИред

Mock.Get(sut.Dep1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ [...] рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ [...] рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ?

рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ? рдЖрдк рдЬреЛ рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЖрдк рдЙрдЬрд╛рдЧрд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред . рдпрд╣ рдЗрд╕реЗ рдмреЗрдирдХрд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ @ploeh рдкрд░ рдЬреЛрдбрд╝рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдиреЗ рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рд╕рдореГрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛!

@ malylemire1 рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХрд┐рд╕реА рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рд╣рдо рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдкреНрд░рд╢реНрди рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдФрд░ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕