Розберемо влаштування тестових фреймворків. Спрограмуємо свій тестовий фреймворк з прикладу PHPUnit. У ньому як у реальному зробимо сканування тестових файлів, тестування очікуваних винятків, що викидаються, і написання параметризованих тестів з провайдерами даних з атрибутом DataProvider.
Заодно відрефакторимо отриманий код, позбавивши його порушення інкапсуляції і від побічних ефектів запису результатів і прямого виведення на екран. Винесемо принтери зведення та прогресу запуску та зробимо слабозв’язану архітектуру з використанням подій