ncsで使うテストフレームワークはどれだ (2)
2024/09/18
前回の続き。
nRF Connect SDK がサポートする Testing with Unity and CMock を試す。
なお、ncs v2.7.0 になると Test framework のようにドキュメントの構成が変更になっている。
Unity + CMock だけでなく Zephyr の Twister というテストツールも使うのか?
と思ったが、こちらは「Running unit tests」で走らせる方だった。
つまり、テストを書くのは Unity + CMock で、走らせるのは Twister か West なのか。
Unity + CMock の最後に書いてあった動かし方も west build -t run
だったし、West は裏で Twister を使っていると書いてあるので、気にしなくてよいのか?
スクリプトを動かすだけだったのでやってみた。
sudo apt install libffi7
testcase.yaml
:native_posix
–>native_posix_64
までで進むようになったがタイムアウトでエラーになった。 タイムアウト時間を調整するパラメータを増やしても終わりそうな気配がないので、なんかダメっぽい。
サンプル
サンプルで提供されているプロジェクトを整理した。
テストのコードはテスト対象のファイルがあるディレクトリ以下にある方がわかりやすいと思う。 が、移動させるとビルドがうまく行かなかった。 何かルールが違うのか、単に私が cmake に慣れていなくて設定が間違えているだけなのか判断が付かない。
モックを作ってテストするコードから参照できるので、関数名などを書き換えていないのであればオリジナルの関数名とかぶってリンクエラーになるはず。
ruby を使った場合がどうやっているのかわかっていないのだが、別の関数名にならないようならテストの実行ファイルを複数用意せねば鳴るまい。
しかし、native-posix
みたいな形で実行するのに複数の実行ファイルになっているものだろうか?
もうちょっと規模が大きいテストを見てみないとわからんな。
サンプルの中身
このサンプルのexample_test.cは foo.c
をモックにして uut_init()
をテストするようになっている。
CMakeLists.txt
test_runner_generate(tests/example_test.c)
unity_main()
を呼び出すmain()
の入ったコード?
cmock_handle(src/foo/foo.h foo)
- モックの作成
1つのプロジェクトで複数モジュールのテストをする方法が分からないとすっきりしない。
testcase.yaml
ファイルがあるが、これはなんだろうか。
ncs v2.7.0 の Running unit testsに名前が出てくるので、Zephyr のテストと組み合わせるときに役に立つのかもしれない。