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

Як тестувати вправи з Fortran на Exercism


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

Файл тестів має назву <exercise>_test.f90, тож для вправи «Bob» файл із тестами називається bob_test.f90. У кожному тесті буде коментар з описом тесту, а потім і сам тест, який починається з call assert_equal, наприклад:

  ! Test 16: non-letters with question
  call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

Щоб вимкнути тест, досить закоментувати його за допомогою '!', наприклад:

  ! Test 16: non-letters with question
  ! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

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

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

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

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

Наприклад, для вправи «Bob» реалізація має лежати у файлі bob.f90.

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

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

Так папка вправи залишається охайною й не захаращеною.

**Примітка: під час першого виклику cmake testlib завантажиться автоматично. testlib потрібен, щоб модульні тести працювали.

Оскільки для кожного завдання ми запускаємо CMake, щоб створити інструкції збірки, можливо, варто створити bash-скрипт (Linux/MacOS) або командний файл (Windows) для цієї команди.

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

  • Linux із make: make
  • Windows із Visual Studio: виберіть Build / Build Solution у меню.
  • Windows із MingW: mingw32-make.exe
  • Windows із nMake: nmake.exe
  • MacOS із Xcode: виберіть Build на панелі інструментів

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

Linux\MacOS із Make

Генератор для CMake називається Unix Makefiles. Нехай поточна вправа має назву bob, а ми перебуваємо в папці цієї вправи:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.

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

$ ctest -V

Windows із Visual Studio 2017

Генератор для CMake називається Visual Studio 15. Той самий генератор підтримує всі IDE-видання Visual Studio 2017: Community, Professional та Enterprise. Нехай поточна вправа має назву bob, а ми перебуваємо в папці цієї вправи:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..

Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.

Windows із MingW

Генератор для CMake називається MinGW Makefiles. Нехай поточна вправа має назву bob, а ми перебуваємо в папці цієї вправи:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..

Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.

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

MacOS із Xcode

Генератор для CMake називається Xcode. Нехай поточна вправа має назву bob, а ми перебуваємо в папці цієї вправи:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.

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

$ ctest -V

Testlib

Тести залежать від невеликої бібліотеки testlib, яка завантажується з GitHub, коли збірку вперше налаштовують за допомогою cmake.

Якщо завантаження не вдалося, його можна зробити вручну, наприклад:

mkdir testlib
cd testlib
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/CMakeLists.txt
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/TesterMain.f90