先日、うっかりM5Paperを買ってしまったので、肥やしにならぬよう、ちょくちょくプログラムを書いているのだが、プロジェクト内で書いた自分のクラスをテストしたいと思った時に少しハマったので、解決策を書いておく。
前提
Arduino IDEは使わない。PlatformIOを使います。ビルドがめちゃくちゃ早いので(Arduino IDEが遅いとも言う)オススメ。
本旨とズレるが、PlatformIO Coreっていうのがあったんだな。PlatformIO IDEしかないのかと思って、VSCodeで書いてた……。
testフォルダ
最初、何も考えずにプロジェクト内のtest
フォルダ内に、test_hoge.cpp
を置いて、以下のようなコードを書いたところうまくいった。
1 |
|
しかし、ここで既にあった自分のクラスをテストしたいと思って以下のようなコードを追加したら、テストコードのビルドが通らなくなった。
1 |
|
test_build_project_src = yes
ドキュメントを確認すると、プロジェクト設定であるplatformio.ini
に、test_build_project_src
という設定があり、それを有効にしないとsrc
フォルダがビルドされないらしい(test_class.h
はinclude
フォルダ、test_class.cpp
はsrc
フォルダにあった)。
なるほど、と思い有効にしてビルドしたが、今度はsetup()
とloop()
が二重定義になってると怒られる。当たり前だ。
lib_dir
更にドキュメントを読んでいくと、Shared Codeと言うところに、本体とテストで共有するコードはlib_dir
に置けとある。
なるほどなるほど、と思いtest_class.cpp
をlib
に移動して試すがダメ。test_class.h
もか?と思い試すがダメ。
ちなみに、test_build_project_src
は無効にしている。
サンプル
更にドキュメントを精査すると、サンプルを見なさいと書いてあった。
自分のプロジェクトと比較すると、lib
フォルダ内の構成が全く違うことに気づいたので、サンプルに合わせたところ、バッチリうまくいった。
結論
最終的なプロジェクト構成は以下のようになった。
ポイントは二つ。
lib
の中は、lib/$(好きなモジュール名)/src
に共有するコードを入れる。ヘッダも一緒に入れちゃっておk。共有ヘッダの#include
は<>
。test
の中は、test/$(テストケース名)
にテストコードを入れる。
今回はやってないけど、テストケースの設定で、実際にデバイスに送って実行するテスト以外に、ホストPCで実行するテストとかも書けるみたい。