.
Партнерка на PHP. Урок 23. Тестируем модуль global_date.php
Автор megabax   
06.06.2014 г.
Структура программы на примере простейшей программы

Разработка сервиса сайта на PHP на примере партнерской программы. Урок 23. Тестируем  модуль global_date.php

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


Исходники к уроку вы можете скачать в платном разделе.

В нашей партнерской программе используется сторонний модуль global_date.php, любезно предоставленный Данилом Газизовым (www.platformx.ru). Это чужой модуль, поэтому его тем более нужно тестировать, прежде чем применять в нашей программе. И так, давайте разработает для этой библиотеки модульный тест. Кстати, именно модульное тестирование позволило выявить некий сюрприз этой библиотеки, о который можно было бы споткнуться в будущем. И так, поясняю, в чем дело.

Пишу тестовую функцию...

...

и сюрприз вылез на последней строчке:

Разработка сервиса сайта на PHP на примере партнерской программы. Урок 23. Тестируем  модуль global_date.php

Как оказалось, что библиотека global_date.php сделана на основе функций PHP, которые работают несколько кривовато. Сам разработчик считает такие погрешности не критичными и в ближайшее время дорабатывать библиотеку не собирается.

Тогда я задал вопрос на форуме: как быть с кривостью стандартных функций php. ....

...

...Для начала я просто реализовал альтернативную функцию add_month_to_date ...

Обратите внимание, каким образом дописываются незначащие нули к номеру месяца, года или числа месяца. Сначала мы прибавляем впереди максимальное количество нулей, например, для года это 4, для месяца и числа - два. И берем столько цифр, сколько нам нужно. Для этого используем substr, с отрицательным вторым параметром она становится аналогом 1С-овской функции "Прав" - взять правую часть строки (числа у нас представлены в виде строк).

Функция add_month_to_date использует daysInMonth, которую я тоже реализовал самостоятельно...

....

... Функция isYearLeap - это функции библиотеки global_date.php, она проверяет, вискосный ли год.

Теперь протестируем эту конкретную функцию add_month_to_date:

        $test->areEqual("addMonths 2011-01-30 + 13", '2011-02-28 00:00:00', add_month_to_date('2010-01-30 00:00:00',13));

        $test->areEqual("addMonths 2011-01-30 + 13", '2011-02-28 00:00:00', add_month_to_date('2010-01-30',13));

Как выяснилось, новая функция устраняет данную особенность:

Разработка сервиса сайта на PHP на примере партнерской программы. Урок 23. Тестируем  модуль global_date.php

Теперь вставляем эту функцию в addMonths...

...

 ....и продолжаем тестировать, заодно так же протестируем функцию addYears. Весь тест находиться в приложенных исходниках.

Последнее обновление ( 06.06.2014 г. )