先日、うっかり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で実行するテストとかも書けるみたい。