Autofixture: Π—Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΠ΅Ρ‚Π° Π½Π΅ отмСняСт Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ экзСмпляр

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 31 июл. 2018  Β·  1ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: AutoFixture/AutoFixture

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄Π²ΡƒΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… экзСмпляров Π²Ρ‚ΠΎΡ€ΠΎΠΉ экзСмпляр ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.

ΠŸΡ€ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ экзСмпляра, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ экзСмпляр, Π²Ρ‚ΠΎΡ€ΠΎΠΉ экзСмпляр Π½Π΅ отмСняСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.

Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ идСю выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ°ΠΊΠ΅Ρ‚, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (с использованиСм конструктора тСстового класса для совмСстного использования фикстуры ΠΌΠ΅ΠΆΠ΄Ρƒ тСстами), довольно Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ.

ОТидаСмоС повСдСниС

ΠŸΡ€ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄Π²ΡƒΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… экзСмпляров Π²Ρ‚ΠΎΡ€ΠΎΠΉ экзСмпляр ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.

ΠŸΡ€ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ экзСмпляра, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ экзСмпляр, Π²Ρ‚ΠΎΡ€ΠΎΠΉ экзСмпляр пСрСопрСдСляСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ повСдСния

`` Π‘ #
using System.Collections.Generic;
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AutoFixture;
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AutoFixture.AutoMoq;
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Moq;
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Xunit;

пространство ΠΈΠΌΠ΅Π½ SomeNamespace
{
ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ класс AutoFixtureTests
{
[Π€Π°ΠΊΡ‚]
// ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚
public void Should_OverridePreviouslyInjectedString ()
{
константная строка test1 = "test1";
константная строка test2 = "test2";

        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);
    }
}

}
`` ''

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @ charles-salmon,

Бпасибо, Ρ‡Ρ‚ΠΎ нашли врСмя ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± этом.

НаблюдаСмоС Π²Π°ΠΌΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ - это Π΄ΠΈΠ·Π°ΠΉΠ½. ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ. πŸ™‚

Если Π²Ρ‹ посмотритС Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Freeze<T> :

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

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚, это создаСт ΠΎΠ±Ρ€Π°Π·Π΅Ρ† T ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² приспособлСниС. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Freeze стал ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ярлыком для этой самой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Как написал @ploeh Π² своСм постС, Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Freeze Π΅Ρ‰Π΅ Π² 2010 Π³ΠΎΠ΄Ρƒ:

Оказалось, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊ часто использовали эту ΠΈΠ΄ΠΈΠΎΠΌΡƒ кодирования, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. ПослС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅Π±Π°Ρ‚ΠΎΠ² ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ названию Freeze, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹, ΠΏΠΎ сути, Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅ΠΌ ΠΎΠ΄Π½Ρƒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² фикстурС, минуя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для создания Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров.

Учитывая это, Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° T Ρ‡Ρ‚ΠΎ ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ экзСмпляр, Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ вашСй Ρ‚ΠΎΡ‡ΠΊΠ΅ зрСния:

Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ идСю выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ°ΠΊΠ΅Ρ‚, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (с использованиСм конструктора тСстового класса для совмСстного использования фикстуры ΠΌΠ΅ΠΆΠ΄Ρƒ тСстами), довольно Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ.

Учитывая, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ±ΠΎΡ€ прСдставляСт _контСкст_, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся тСст, Π²Ρ‹, бСзусловно, _ΠΌΠΎΠΆΠ΅Ρ‚Π΅_ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько тСстов, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ приспособлСниС ; ΠΎΠ΄Π½Π°ΠΊΠΎ это происходит Π·Π° счСт смСшСния мноТСства - ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Ρ… - ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Книга xUnit Patterns прСкрасно Ρ€Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΠ΅Ρ‚ :

Бамая большая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Shared Fixture Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Β«ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ тСстами, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ тСстам , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ тСсты ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… тСстов. Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ приспособлСниС, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для обслуТивания мноТСства тСстов, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Ρ‡Π΅ΠΌ минимальноС приспособлСниС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСста.

Π­Ρ‚Π° «коллизия» - ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° тСст ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° T Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ экзСмпляром, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ тСст ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ T Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ .

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ тСстовый сцСнарий, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° T ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ экзСмпляром (хотя я счастлив, Ρ‡Ρ‚ΠΎ ошибаюсь), я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ эти Π’ тСстах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ приспособлСния, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… настроСно для своСго ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сцСнария.

>ВсС замСчания

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @ charles-salmon,

Бпасибо, Ρ‡Ρ‚ΠΎ нашли врСмя ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± этом.

НаблюдаСмоС Π²Π°ΠΌΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ - это Π΄ΠΈΠ·Π°ΠΉΠ½. ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ. πŸ™‚

Если Π²Ρ‹ посмотритС Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Freeze<T> :

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

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚, это создаСт ΠΎΠ±Ρ€Π°Π·Π΅Ρ† T ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² приспособлСниС. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Freeze стал ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ярлыком для этой самой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Как написал @ploeh Π² своСм постС, Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Freeze Π΅Ρ‰Π΅ Π² 2010 Π³ΠΎΠ΄Ρƒ:

Оказалось, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊ часто использовали эту ΠΈΠ΄ΠΈΠΎΠΌΡƒ кодирования, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. ПослС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅Π±Π°Ρ‚ΠΎΠ² ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ названию Freeze, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹, ΠΏΠΎ сути, Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅ΠΌ ΠΎΠ΄Π½Ρƒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² фикстурС, минуя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для создания Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров.

Учитывая это, Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° T Ρ‡Ρ‚ΠΎ ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹ΠΉ экзСмпляр, Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ вашСй Ρ‚ΠΎΡ‡ΠΊΠ΅ зрСния:

Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ идСю выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ°ΠΊΠ΅Ρ‚, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (с использованиСм конструктора тСстового класса для совмСстного использования фикстуры ΠΌΠ΅ΠΆΠ΄Ρƒ тСстами), довольно Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ.

Учитывая, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ±ΠΎΡ€ прСдставляСт _контСкст_, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся тСст, Π²Ρ‹, бСзусловно, _ΠΌΠΎΠΆΠ΅Ρ‚Π΅_ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько тСстов, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ приспособлСниС ; ΠΎΠ΄Π½Π°ΠΊΠΎ это происходит Π·Π° счСт смСшСния мноТСства - ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Ρ… - ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Книга xUnit Patterns прСкрасно Ρ€Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΠ΅Ρ‚ :

Бамая большая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Shared Fixture Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Β«ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ тСстами, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ тСстам , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ тСсты ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… тСстов. Другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ приспособлСниС, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для обслуТивания мноТСства тСстов, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Ρ‡Π΅ΠΌ минимальноС приспособлСниС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСста.

Π­Ρ‚Π° «коллизия» - ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° тСст ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° T Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ экзСмпляром, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ тСст ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ T Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ .

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ тСстовый сцСнарий, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° T ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ экзСмпляром (хотя я счастлив, Ρ‡Ρ‚ΠΎ ошибаюсь), я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ эти Π’ тСстах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ приспособлСния, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… настроСно для своСго ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сцСнария.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ