Autofixture: рдореЙрдХ рдлрд╝реНрд░реАрдЬрд╝ рдХрд░рдирд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдЬреБрд▓ре░ 2018  ┬╖  1рдЯрд┐рдкреНрдкрдгреА  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

рджреЛ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдирдХрд▓реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирдХрд▓реА рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд┐рд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

рджреЛ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдирдХрд▓реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг

```рд╕реА#
System.Collections.Generic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
AutoFixture.AutoMoq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Moq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
Xunit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;

рдиреЗрдорд╕реНрдкреЗрд╕ рдХреБрдЫ рдиреЗрдорд╕реНрдкреЗрд╕
{
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ AutoFixtureTests
{
[рддрдереНрдп]
// рдЧреБрдЬрд░рддрд╛
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп should_Overrideрдкрд┐рдЫрд▓рд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ ()
{
рдХреЙрдиреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрд╕реНрдЯ 1 = "рдЯреЗрд╕реНрдЯ 1";
рдХреЙрдиреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрд╕реНрдЯ 2 = "рдЯреЗрд╕реНрдЯ 2";

        var fixture = new Fixture();

        fixture.Inject(test1);
        fixture.Inject(test2);

        Assert.Equal(fixture.Create<string>(), test2);
    }

    [Fact]
    // Fails
    public void Should_OverridePreviouslyInjectedInstance()
    {
        var fixture = new Fixture().Customize(new AutoMoqCustomization());

        var sut1 = new List<int>();

        fixture.Inject<IList<int>>(sut1);
        fixture.Freeze<Mock<IList<int>>>();

        var sut2 = fixture.Create<IList<int>>();

        Assert.NotSame(sut1, sut2);
    }
}

}
```

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

рд╣рд╛рдп @ рдЪрд╛рд░реНрд▓реНрд╕-рд╕реИрд▓реНрдорди,

рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЖрдк рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ _by design_ рд╣реИред рдореБрдЭреЗ рд╕рдордЭрд╛рдиреЗ рджреЛред рдореИрдВ

рдпрджрд┐ рдЖрдк Freeze<T> рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

var value = fixture.Create<T>();
fixture.Inject(value);
return value;

рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ T рдХрд╛ рдПрдХ рдирдореВрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Freeze рд╡рд┐рдзрд┐ рдЗрд╕реА рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдИред рдЬреИрд╕рд╛ рдХрд┐ @ploeh рдиреЗ 2010 рдореЗрдВ рдлрд╝реНрд░реАрдЬрд╝ рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛

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

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ T рдХреЛ рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдлреНрд░реАрдЬ рдХрд░рдиреЗ рд╕реЗ рд╡рд╣реА рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдЕрдм, рдЕрдкрдиреА рдмрд╛рдд рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдпрд╣ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирдХрд▓реА рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд┐рд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдПрдХ рд╕реНрдерд┐рд░рддрд╛ _context_ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рддрд╛ рд╣реИ, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ _can_ рдХреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рди рд╕реНрдерд┐рд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХрдИ-рдФрд░ рд╕рдВрднрд╡рддрдГ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА-рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдХреАрдордд рдкрд░ рдЖрддрд╛ рд╣реИред

xUnit рдкреИрдЯрд░реНрди рдкреБрд╕реНрддрдХ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреА рд╣реИ:

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

рдпрд╣ "рдЯрдХреНрдХрд░" рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкрд░реАрдХреНрд╖рдг T рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдкрд░реАрдХреНрд╖рдг T рдирдХрд▓реА рд╡рд╕реНрддреБ рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ T рд▓рд┐рдП рдПрдХ рдирдХрд▓реА _рдФрд░_ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реИ), рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпреЗ рд╣реИрдВ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рднрд┐рдиреНрди рдлрд┐рдХреНрд╕реНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рд╣рд╛рдп @ рдЪрд╛рд░реНрд▓реНрд╕-рд╕реИрд▓реНрдорди,

рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЖрдк рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ _by design_ рд╣реИред рдореБрдЭреЗ рд╕рдордЭрд╛рдиреЗ рджреЛред рдореИрдВ

рдпрджрд┐ рдЖрдк Freeze<T> рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

var value = fixture.Create<T>();
fixture.Inject(value);
return value;

рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ T рдХрд╛ рдПрдХ рдирдореВрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Freeze рд╡рд┐рдзрд┐ рдЗрд╕реА рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдИред рдЬреИрд╕рд╛ рдХрд┐ @ploeh рдиреЗ 2010 рдореЗрдВ рдлрд╝реНрд░реАрдЬрд╝ рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛

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

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ T рдХреЛ рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдлреНрд░реАрдЬ рдХрд░рдиреЗ рд╕реЗ рд╡рд╣реА рдЙрджрд╛рд╣рд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдЕрдм, рдЕрдкрдиреА рдмрд╛рдд рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдпрд╣ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирдХрд▓реА рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд┐рд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдПрдХ рд╕реНрдерд┐рд░рддрд╛ _context_ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рддрд╛ рд╣реИ, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ _can_ рдХреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рди рд╕реНрдерд┐рд░рддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХрдИ-рдФрд░ рд╕рдВрднрд╡рддрдГ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА-рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдХреАрдордд рдкрд░ рдЖрддрд╛ рд╣реИред

xUnit рдкреИрдЯрд░реНрди рдкреБрд╕реНрддрдХ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреА рд╣реИ:

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

рдпрд╣ "рдЯрдХреНрдХрд░" рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкрд░реАрдХреНрд╖рдг T рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдкрд░реАрдХреНрд╖рдг T рдирдХрд▓реА рд╡рд╕реНрддреБ рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ T рд▓рд┐рдП рдПрдХ рдирдХрд▓реА _рдФрд░_ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реИ), рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпреЗ рд╣реИрдВ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рднрд┐рдиреНрди рдлрд┐рдХреНрд╕реНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

josh-degraw picture josh-degraw  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Ephasme picture Ephasme  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zvirja picture zvirja  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Eldar1205 picture Eldar1205  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Ridermansb picture Ridermansb  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ