Тестування на треку C++

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


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

Примітка: Кожного разу, коли ми збираємо свій проєкт, код перевіряється набором тестів. Якщо код не проходить один чи кілька тестів, але є коректним кодом C++, його все одно буде скомпільовано.

Робота над кожною вправою складається з таких кроків:

  • Створення початкової збірки за допомогою CMake
  • Для кожного модульного тесту:
    • Виправлення помилок компіляції, щоб тест провалився.
    • Реалізація рівно стільки, щоб тест пройшов.
    • Рефакторинг реалізації для підвищення читабельності, зменшення дублювання тощо.
    • Розкоментування наступного тесту

Створення початкової збірки за допомогою CMake

Кожна вправа містить файл CMakeLists.txt разом із модульними тестами. У ньому є готовий рецепт CMake, який виконує збірку за нас. Редагувати цей файл не потрібно. Наданий рецепт припускає, що наша реалізація складається із заголовного файлу та файлу коду, названих за вправою.

Наприклад, вправа bob очікує реалізацію у файлах bob.h і bob.cpp. Для вправ із дефісами в назві вважається, що файли коду використовують підкреслення, тож вправа word-count очікує word_count.h і word_count.cpp. Може виявитися, що реалізація досить проста і її можна повністю розмістити в заголовному файлі, і тоді файл cpp можна не створювати.

Створіть початкові файли реалізації перед запуском CMake. Якщо під час запуску CMake для вправи bob файлів bob.h і bob.cpp немає, CMake видасть помилку про те, що файлів не знайдено. Ці файли можуть бути порожніми, але вони мусять існувати.

Скориставшись цим рецептом, можемо згенерувати за допомогою CMake відповідний проєкт для свого середовища, запустивши cmake -G з потрібним генератором і шляхом до каталогу вправи. CMake згенерує сценарій збірки, відповідний до нашої операційної системи. Щоб відокремити ці згенеровані файли від коду вправи, зазвичай створюють каталог build для згенерованих файлів збірки та скомпільованого коду. Так папка вправи залишається незахаращеною й охайною.

Коли CMake створить середовище збірки, код можна зібрати відповідною командою для свого середовища:

  • Linux із make: make
  • Windows із Visual Studio: виберіть Build / Build Solution у меню.
  • MacOS із Xcode: виберіть Build на панелі інструментів
  • MacOS із «Unix Makefile»: make Якщо користуємося застосунком Exercism CLI

Нижче наведено приклади запуску CMake для різних середовищ.

Linux із Make

Назва генератора для CMake - Unix Makefiles. Припустімо, що ми працюємо з вправою bob і перебуваємо в її папці:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

У цьому прикладі спочатку створюємо порожні файли реалізації, а потім запускаємо CMake.

Просто введіть make у каталозі збірки, щоб скомпілювати тести. Це має породити помилки часу компіляції. Коли помилки виправлено, make збере та запустить тести.

Windows із Visual Studio

Visual Studio має вбудовану підтримку проєктів CMake, тож окремо встановлювати CMake чи запускати його поза Visual Studio не потрібно. Скористайтеся цим посібником, щоб налаштувати проєкт CMake у Visual Studio.

MacOS із Xcode

Назва генератора для CMake - Xcode. Припустімо, що ми працюємо з вправою bob і перебуваємо в її папці:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

У цьому прикладі генеруються файли XCode, щоб можна було відкрити проєкт у XCode. Коли проєкт відкрито в XCode, може знадобитися додати ще одну ціль. Щоб створити нову ціль, перейдіть у меню до File -> New -> Target, виберіть OS X \ Application \ Command Line Tool -> Next, вкажіть C++ як мову й задайте назву цілі. Запускайте код за допомогою цілі.

Якщо термінал видає помилку Xcode x.x not supported, найімовірніше, Xcode не встановлено на нашій машині або його версія застаріла. Завантажте й встановіть Xcode з App Store або за цим посиланням. Помилки на кшталт The CXX compiler identification is unknown найімовірніше зникнуть, якщо скористатися інструкціями зі встановлення GCC або додати ще одну ціль у Xcode, як описано вище.

MacOS із Make коли користуємося Exercism CLI

Цей приклад стане в пригоді тим, хто хоче користуватися застосунком Exercism CLI для налаштування, тестування та надсилання своїх вправ із C++.

Назва генератора для CMake - Unix Makefiles. Припустімо, що ми працюємо з вправою bob і перебуваємо в її папці:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

У цьому прикладі ми справді створюємо порожні файли реалізації перед запуском CMake, але не створюємо порожній каталог збірки. Річ у тім, що Exercism CLI використовує файл .exercism/metadata.json у кореневому каталозі, щоб розібрати тестові випадки.

Просто введіть exercism test у кореневому каталозі, щоб скомпілювати тести. Це має породити помилки часу компіляції. Коли помилки виправлено, повторний запуск exercism test збере та виконає тести за допомогою Exercism CLI.