Осветителни тела - тестване - подробно ръководство за Yii 2

Осветителни тела (на английски език арматура.) - това е важен компонент на теста. Тяхната основна задача е да се подготви за околната среда с предварително фиксиран / известен състояние да се гарантира повторяемост на процеса на тестване. Yii осигурява рамка, която позволява лесно и точно определяне на тела и да ги използвате във вашите изследвания.

Основната концепция в рамките, Yii тела е т.нар обект тела. Предмет на приспособление е от особен аспект на тестовата среда, която е наследена от Yii \ тест \ фиксиране или неговите наследници. Например, можете да използвате UserFixture да бъдете сигурни, че масата за потребителите е добре познат набор от данни. Вие се зареди един или повече обекти, преди да започне след изпитвания и да ги разтоварят след завършване.

Фиксиране може да зависи от други тела, определено чрез имот Yii \ тест \ фиксиране :: $ зависи. Когато е поставено приспособление, опората, върху които това зависи, автоматично се изтеглят към нея и когато тя се разтоварва всички зависими тела ще бъдат разтоварени след него.

Следният код показва как да обяви тяло модел ActiveRecord потребителя. което съответства на масата на потребителя.

Съвет: За всеки ActiveFixture предназначени за подготовка на таблиците в базата данни за тестване. Можете да зададете на масата като имот чрез Yii \ тест \ ActiveFixture :: $ tableName. и през имот Yii \ тест \ ActiveFixture :: $ modelClass. Ако последното, тогава името на таблицата ще бъде взето от ActiveRecord модел. посочено в modelClass.

Забележка: Yii \ тест \ ActiveFixture използва само за релационни бази данни. За NoSQL Yii предоставя следните класове решения ActiveFixture:

Данните за ActiveFixture на тела обикновено са FixturePath / данни / TableName.php файл
където FixturePath точки до директорията, в която приспособление е от класа на файла и името TableName маса, с която е свързан. За примера по-горе, данните трябва да имат, за да бъде в файл @ ап / тестове / тела / данни / user.php. Този файл трябва да връща масив от редовете с данни, за да се добавят в таблицата за употреба. например

Можете да зададете псевдоним линия в бъдеще, можете да се обърнете към него в своите изследвания. В горния пример два реда имат user1 и USER2 псевдоними. съответно.

Също така, не е нужно да се уточни данните за колони с автоматично увеличение. Yii автоматично ще попълни данните на стойност колона по време на натоварването на хващане.

Съвет: можете да укажете пътя до файла с данни чрез имот Yii \ тест \ ActiveFixture :: $ файл от данни. Можете също така да замени метод Yii \ тест \ ActiveFixture :: getData (). за предоставяне на данните.

Както е описано по-рано, тяло може да зависи от други тела. Например, може да се наложи да UserProfileFixture зависимост UserFixture защото масата на потребителски профили съдържа външен ключ, който сочи към масата на потребителя. Зависимост е обозначено с имот Yii \ тест \ фиксиране :: $ зависи. както по-долу

Зависимост също така гарантира, че телата са заредени и разтоварват в определен ред. В предишния пример UserFixture автоматично ще бъде изтеглен на UserProfileFixture. този начин се гарантира наличието на всички външни ключове, и ще бъдат разтоварени след UserProfileFixture изхвърлена поради същите причини.

Използването тела

Ако използвате Codeception за тестване на кода си, трябва да се обмисли възможността за използване на разширение yii2-codeception. която е вградена поддръжка за зареждане на арматура и достъп до тях. Ако използвате различен тестване рамка, можете да използвате Yii \ тест \ FixtureTrait във вашите тестове за тази цел.

След това, ние ще опишем как да напишете тест единица за модел клас Userprofile използване разширяване yii2-codeception.

Декларирам какво тела искате да използвате тела () метод за тестване на класа си единица, наследена от Yii \ codeception \ DbTestCase или Yii \ codeception \ TestCase. Например,

Осветителни тела, посочени в метода на тела () ще бъдат изтеглени автоматично преди всеки метод за изследване на случая тестове и разтоварват след приключване на всеки метод на изпитване. И, както описахме по-рано, когато е поставено приспособление, всички негови зависими тела са автоматично заредени в първото място. В горния пример, ако един метод за изпитване в случаите на изпитване в последователност ще бъде зареден две тела: UserFixture и UserProfileFixture. защото UserProfileFixture зависи UserFixture.

За определяне на тела в тела () метод, можете да използвате името на класа, или набор от настройки. С набор от настройки, които можете да персонализирате свойствата на тела да бъдат инсталирани, когато е зареден.

Можете също така да зададете тяло псевдоним. В горния пример, профили е известен тела UserProfileFixture на. Използването на псевдоним, можете да получите на арматура обекта във вашите методи за изпитване. За пример, $ това-> профили UserProfileFixture върнат обекта.

От UserProfileFixture наследена от ActiveFixture. Можете да използвате следния синтаксис за достъп до тела на данни:

Инфо: $ това-> профили продължава да бъде обект на клас UserProfileFixture. Тези функции се изпълняват чрез достъп PHP магически техники.

Дефиниране и използване на глобални тела

Фиксиране описано по-горе се използват главно в рамките на определени случаи за изпитване. В повечето случаи, ще трябва също така глобален fikstry, които се използват във всички или повечето от тестовете. Пример за това е тяло Yii \ тест \ InitDbFixture. който прави 2 неща:

  • Работи с най-скрипт @ ап / тестове / тела / initdb.php за извършване на серия от тестове среда инициализация на общи задачи;
  • Забранява проверка на целостта на данните, преди да изтеглите останалите тела и включва гърба си след като всички други тела са разтоварени.

С помощта на глобалната тяло, подобно на използването на не-глобално. Единствената разлика е, че трябва да се декларират тези тела в метод Yii на \ codeception \ TestCase :: globalFixtures (). вместо тела (). Когато тест-случая зарежда тела, натоварени първата глобална тяло, а след това всичко останало.

По подразбиране, приспособлението има InitDbFixture obyavlena метод globalFixtures () клас Yii на \ codeception \ DbTestCase. Това означава, че трябва да се работи само с файл @ ап / тестове / тела / initdb.php. ако искате да се преди всеки извършен тест на някои подготвителни работи. В противен случай, може просто да се съсредоточи върху развитието на конкретни случаи за изпитване и свързаните с тях тела.

Организация на класове тела и файлове с данни,

По този начин ще се избегне конфликт на файлове тела на данни между тестовете и ще ги използва, колкото е необходимо.

Забележка: в горния пример, файлове с данни за хващане наречени така, тъй като само един пример. В реалния живот, трябва да се обърнете към тях, в съответствие с тази на един клас наследява класа си тяло. Например, когато наследи от Yii \ тест \ ActiveFixture тела за базата данни, трябва да използвате името на таблицата, тъй като името на файла с данни; наследство от Yii \ MongoDB \ ActiveFixture тела за MongoDB, трябва да използвате името на колекцията като името на файла.

Можете да използвате подобна йерархия да организира класа файлове тела. За да се избегне конфликт с файлове с данни можете да използвате като главната директория тела, вместо данните.

резюме

Забележка: Този раздел е в процес на изграждане.

Над описахме как да се декларират и да използвате приспособлението. По-долу е извадка скрипт единица тестове, свързани с базата данни:

  1. Използвайте Yii мигрират команда, за да актуализира базата данни за тест за най-новата версия;
  2. Пусни случая тестове:
    • Зарежда тяло: прочистване от съответните таблици в базата данни и да ги напълни с тела на данни;
    • Тест изпълнение;
    • Разтоварни тела.
  3. повторение на стъпка 2, до момента, докато не завършите всички тестове.

Забележка: Този раздел е в процес на изграждане.

със задачи: този раздел може да се комбинира с предишните части test-fixtures.md

Осветителни тела са важен компонент на теста. Тяхната основна задача е да се осигури набор от данни, необходими за тестване на различни сценарии на вашата кандидатура. С тази информация, използването на вашите тестове са по-ефективни и полезни.

Yii подкрепя тела чрез полезност Yii тяло командния ред. Тази помощна програма поддържа:

  • Зареждане на тела в различни магазини, като например: RDBMS, NoSQL, и други;
  • Разтоварни тяло по различни начини (обикновено почиства хранилището);
  • Автоматично генериране на тела и ги изпълва с случаен данни

тела формат

Осветителни тела - са обекти с различни методи и конфигурации, които можете да прочетете в официалната документация.

Да приемем, че имаме следния набор от данни тела за изтегляне:

Изтегляне на тела

Клас тела за фиксиране трябва да съдържат наставка. По подразбиране търсенето се извършва в пространството на тела тества единица \ тела Наименование \. но можете да промените това поведение чрез конфигурационен файл или параметри на командата. Можете да отстраните някои от тела на товарене или разтоварване на добавяне - пред името си, например -user.

За изтегляне на арматура, изпълнете следната команда ::

Задължително fixture_name точка до името на арматура, която трябва да бъде изтеглен. Можете да изтеглите няколко тела в даден момент. По-долу са примери за правилното използване на тази команда:

разтоварване тела

За да се разтоварят тяло, изпълнете следната команда:

Когато разтоварване тела можете да използвате и параметрите пространство от имена и globalFixtures.

Глобални конфигурационни команди

Въпреки, че параметрите на командния ред и да ни позволи да персонализирате командата миграция в движение, понякога може да се наложи да изберете командата веднъж за всички работещи скриптове. Например, можете да настроите различни начини да се подадат тела в примера по-долу:

Автоматично генериране на тела

Yii може автоматично да генерира за вас тела въз основа на шаблон. Можете да генерирате арматура с различен набор от данни на различни езици и в различни формати. Тази функция се основава на използването и разширяването на библиотеката фалшификатор yii2-фалшификатор.

За повече информация се обърнете към ръководството.