Open1

GoogleMock/fffによるベアメタルテスト

堀江誠一堀江誠一

TDDをやっていると、モックによるテストを「無駄だな」と思う瞬間がある。

私は関数をかなり小さな単位にまとめるのが好きで、そうなると必然的に内部の動作は簡単になる。引数のある関数はまだしもinit()なんてメンバー関数だと、「関数XXを引数YYで呼ぶ」というそれだけになる。ここでYYは定数。

そうなると、もうテストされる関数とテストケースの間に差はない。テーブルを使ってレジスタ群を初期化する関数など、テーブルはテストされる関数から持ってくる羽目になったりする。

だからモックによるテストを「無駄だ」と考える人が一定数居ることは理解できる。それでも、私はここ数年身についたスキルとしてのテスト/TDDを手放す気はない。

ベアメタル・プログラミングは実機でのテストが難しい分野だ。網羅的にテストしようにも、ターゲットが遅すぎたり、すべてのケースがメモリに乗らなかったりする。プログラムのロードにかかる時間はデスクトップのそれの数十倍、数百倍になる。勢い、テストには人手が必要で、しかも「将来のために実装したコード」を今試験するのが難しく、いざ使う時にはテストをしていないことを覚えていない。

だから、多少面倒でも今は愚直にGoogle Mockを使ってプログラムをテストしている。単純な関数であっても、いや、だからこそ単純ミスが生じる。テーブルをコピペするときに改めて見直すとミスがある。今使わないコードも執拗にテストできる。

テストそのものは確かに退屈なのだけど、私個人に関していえば性に合っていると思う。実機によるテストよりもずっと楽しい。