Единично тестване със Simpletest

В Drupal има два вида тестване – единично и функционално. Вече говорих за функционално тестване със Simpletest. Време е да поговорим за модулността.

Искам веднага да отбележа, че модулното тестване не означава, че модулите ще бъдат тествани. Просто на английски се казва Unit testing, което традиционно се превежда катотестване на единици. А фактът, че всичко в Drupal е изградено върху модули, е нещастно съвпадение;)

Както и преди, за примерите ще използвам кода от модулаSimpletest Example, който е част от примери. Това е добре за вас, защото можете да изтеглите и видите изходния код или да го изпробвате в действие.

Така че, докато тестването на функционалност чрез класаDrupalWebTestCase е по-често срещано, може да има нужда да напишете традиционен модулен тест. Най-простият модул ви позволява да тествате с някой от тези методи.

Какво ще тестваме?

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

Както е написано, функцията трябва да връща TRUE само ако променливата $date_string е валидна за вмъкване в базата данни. Трябва да проверим върнатите стойности на функцията, ако в аргумента й се предават различни данни. Например променливата $date_string може да бъде NULL, празен низ, '0000-00-00', '0000-00-00 00:00:00', число, непразен низ и т.н.

Създаване на тест

Първата стъпка е да създадете тестов файл. Създава се в папката с модула иима разширение.test. В нашия пример това еsimpletest_example.test.

За да може Drupal да намери вашия тест, трябва да го опишете винформационния файл на модула в конструкцията files[]. Ако модулът вече е активиран - след добавяне на теста не забравяйте да изчистите кеша на сайта. Пример:

Сега отворете тестовия файлsimpletest_example.test и създайте клас за единичния тест. Трябва да бъде наследен отDrupalUnitTestCase :

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

След внедряване на методаgetInfo() можете да продължите към писане на тест. Всички модулни тестове трябва да започват с думата „тест“ с малки букви. Всички методи, които започват с тази дума, се разпознават автоматично от Simpletest и се изпълняват по време на фазата на тестване. Възможно е да се разделят различни твърдения в различни методи, но се препоръчва да се използва един и същ метод за това. Можете да направите това по следния начин:

Това е всичко. Вероятно е, че когато пишете тестовете си, те ще бъдат по-сложни и ще съдържат много редове код преди вмъквания. Те обаче във всеки случай ще бъдат по-прости от тест, написан сDrupalWebTestCase.