Open1
GoogleMock/fffによるベアメタルテスト
TDDをやっていると、モックによるテストを「無駄だな」と思う瞬間がある。
私は関数をかなり小さな単位にまとめるのが好きで、そうなると必然的に内部の動作は簡単になる。引数のある関数はまだしもinit()なんてメンバー関数だと、「関数XXを引数YYで呼ぶ」というそれだけになる。ここでYYは定数。
そうなると、もうテストされる関数とテストケースの間に差はない。テーブルを使ってレジスタ群を初期化する関数など、テーブルはテストされる関数から持ってくる羽目になったりする。
だからモックによるテストを「無駄だ」と考える人が一定数居ることは理解できる。それでも、私はここ数年身についたスキルとしてのテスト/TDDを手放す気はない。
ベアメタル・プログラミングは実機でのテストが難しい分野だ。網羅的にテストしようにも、ターゲットが遅すぎたり、すべてのケースがメモリに乗らなかったりする。プログラムのロードにかかる時間はデスクトップのそれの数十倍、数百倍になる。勢い、テストには人手が必要で、しかも「将来のために実装したコード」を今試験するのが難しく、いざ使う時にはテストをしていないことを覚えていない。
だから、多少面倒でも今は愚直にGoogle Mockを使ってプログラムをテストしている。単純な関数であっても、いや、だからこそ単純ミスが生じる。テーブルをコピペするときに改めて見直すとミスがある。今使わないコードも執拗にテストできる。
テストそのものは確かに退屈なのだけど、私個人に関していえば性に合っていると思う。実機によるテストよりもずっと楽しい。