GitHub Actions を使用して、プッシュ時、プルリクエスト作成時にライブラリのコードを自動的に検証します。
この検証を行うことで、ライブラリ追加時にコンパイルエラーになったり、バグが生じることを大幅に減らせます。
テストコードのビルドに失敗、もしくは終了コードが 0 以外の場合、検証が失敗します。
検証の状態は Action タブ から確認できます。ワークフローは
UdonLibrary/.github/workflows/
に定義されています。またのメインページの README に貼られているバッジから見ることもできます(反映に少し時間がかかります)。
検証が成功している場合
passing
と表示され、失敗しているとfailing
と表示されます。
arduino cli を使用してコンパイルできるか検証します。
このテストでは構文のチェックを行うだけで、アルゴリズムのチェックは行いません。コンパイル時に処理可能なアルゴリズムはテストされます。
検証されるボードは Arduino Nano
Uno
UnoMini
Raspberry Pi Pico
PicoW
Teensy3.5
3.6
4.0
4.1
です。
UdonLibrary/test/ArduinoLint/src
下にディレクトリを作成するだけでよいです。
Arduino の仕様で
src
ディレクトリ内のソースファイルは再帰的にコンパイルされるため、src
ディレクトリ下に配置したファイルは全て検証されます。
UdonLibrary/test/ArduinoLint/src/Sample
に .cpp
ファイルを作成します。
test
という関数は他のテストファイルにも存在しているため、static
関数にし内部リンケージを持たせています。
コンパイル時に値が決定する関数、定数は static_assert(定数式, 文字列リテラル)
を使用してテストできます。
static_assert
は定数式がfalse
であるときにコンパイルエラーになります。
本テストのワークフローは UdonLibrary/.github/workflows/ArduinoLint.yml
に定義されています。
このファイルにある matrix: bord:
に fqbn
を調べ追記することでボードを追加できます。
arduino-cli のインストールがされている場合、以下コマンドで調べられます。
プラットフォームを追加するには (プラットフォームを追加するとfqbnが上記のコマンドで表示されるようになります)
URL プラットフォームをから追加するには
UdonLibrary/test/ArduinoLint/ArduinoLint.ino
を ArduinoIDE で開き、検証ボタンを押すことで、プッシュせずにテストを実行できます。
GoogleTest を使用してアルゴリズムの検証を行います。
UdonLibrary/test/UnitTest
下にディレクトリを配置します。
GoogleTest は CMake を使用してビルドを行います。そのためビルドしたいファイル、ディレクトリを CMakeLists.txt に登録する必要があります。
ディレクトリを追加する場合、追加した親ディレクトリ内の CMakeLists.txt
に add_subdirectory
を使用してディレクトリを登録します。
UdonLibrary/test/UnitTest
にディレクトリを追加し、 .cpp
ファイルを追加します。
ソースファイルを追加する場合、追加したディレクトリ内の CMakeLists.txt
に add_executable
を使用してソースファイルを登録します。
加えて GoogleTest とのリンク設定、本ライブラリのインクルードパス設定を行います。
${UDON_LIBRARY_DIR}
は実行マシンから見たUdonLibrary/src
の絶対パス名でUdonLibrary/test/UnitTest/CMakeLists.txt
内で定義されます。
追加したソースファイルにテストコードを記述します。テストコードの書き方は GoogleTest ドキュメント を参照してください。
EXPECT_EQ(val1, val2)
はval1 == val2
であるかを検証します。
UdonLibrary/test/UnitTest
で以下のコマンドを実行することで、プッシュせずにローカルで実行できます。
CMake のインストールをあらかじめ済ませておく必要があります。
# Windowswinget install -e --id Kitware.CMake# MacOS Linuxbrew install cmake# Linuxsudo apt update && sudo apt install cmake
GoogleTest はサブモジュールとして追加されているため、本ライブラリを
--recursive
オプションを付けずクローンした場合追加されません。サブモジュールをクローンするには次のコマンドを実行します。git submodule update --init --recursive