Тестування на треку Pharo

Дізнайтеся, як тестувати свої вправи з Pharo на Exercism


У найпростішому розумінні Exercism тримається на тестах і тестуванні, адже саме вони рухають нашу реалізацію вперед і підказують, коли вправу завершено.

Миттєвий зворотний звʼязок

Pharo має чудову підтримку роботи з тестами та інкрементального тестування! Будь-який тест вправи можна запустити, натиснувши на кульку поруч із класом або методом тестового випадку.

Кульки тестів у браузері

Кульки тестів забарвлюються відповідно до результату останнього запуску тестів:

  • зелений у разі успішного проходження
  • жовтий у разі невдалого твердження
  • червоний у разі помилки часу виконання або винятку

Упорядковані тести

Тести у вправах Exercism навмисно пронумеровано, щоб задати визначений порядок виконання (наприклад, test01_verifySomeProperty, test02_verifyAnotherProperty тощо).

Працюючи над вправою, варто натиснути на кульку першого тесту, розібратися, у чому полягає невдача і що потрібно, щоб його пройти, а потім додати до рішення код, який це забезпечить. У Pharo цілком нормально вносити ці зміни прямо в налагоджувачі, де доступний і редактор коду, і перегляд усіх змінних та параметрів, які допомагають зрозуміти проблему.

ЗАУВАЖЕННЯ: позначати тести префіксом із порядковим номером не є звичною практикою, і НЕ варто робити цього, пишучи тести для власного проєкту.

Він запускається, навіть коли код зламано

Pharo охоче запускається з кодом, який зламано, а налагоджувач просто відкриється знову, коли трапиться помилка (синтаксична помилка, хибне значення або навіть відсутній клас чи метод). Цей підхід значною мірою вплинув на розробку через тестування, і його можна скуштувати, спробувавши запустити перший тест будь-якої вправи. Налагоджувач одразу покаже, що клас нашого рішення не знайдено (адже ми ще нічого не написали). Зручно, що є кнопка «Create», яка допомагає додати відсутній клас і продовжити виконання, доки воно не завершиться або не трапиться наступна помилка.

Створення класу в налагоджувачі

На першому тесті ми натрапляємо на другу помилку, бо методів ще не написано. І знову кнопка «Create» в налагоджувачі дає змогу визначити метод і продовжити виконання. На цьому етапі можна також перейти нижче стеком викликів, переглянути вимоги тесту, що не проходить, і змінити новий метод, щоб тест пройшов.

Як полюбити налагоджувач

Пізніше, у процесі розробки, може стати в пригоді перейти далі назад стеком і скористатися кнопкою «Restart», щоб відновити виконання програми з ранішої точки, а потім покроково пройтися програмою і побачити, що відбувається. Це важливий і корисний спосіб зрозуміти, чому програма не працює.

Окрім перегляду змінних у налагоджувачі, можна також виділити будь-яку інструкцію й натиснути inspect/print, щоб побачити результат її обчислення. Це буває корисно, коли перевіряємо результати методу або досліджуємо внутрішній стан обʼєкта.

Перегляд інструкції

Не забуваймо, що в налагоджувачі можна також змінювати код наживо, і збереження зміни просто перезапустить виконання методу, який щойно збережено. Це дає змогу експериментувати зі змінами та бачити їхні результати, поки ми ще «в моменті».

Підсумовуючи: не біймося користуватися налагоджувачем у Pharo, ми вважаємо його цінним інструментом, який допомагає зрозуміти проблему та поекспериментувати з нею.

Більші групи тестів та автоматизація

Якщо колись знадобиться запустити більші групи тестів, їх можна запустити з меню Package, а також скористатися інструментом Test Runner (він доступний із меню World або за комбінацією <meta> + OU).

Тести можна запускати й програмно з Playground, обчисливши та надрукувавши результат:

AllExercismTests suite run.

Якщо хочеться дізнатися більше про внутрішню будову тестів, можна почитати про SUnit або переглянути код в ієрархії TestCase.

Цікавий факт: TDD винайшли у Smalltalk завдяки появі бібліотеки тестування SUnit