Cで実装したコードをテストしてぇって頼まれた。
なのでお約束のCUnitを紹介してあげたんだが、
そのテスト対象はさらに下位の関数を呼んでる。
なのでMockが欲しいらしい。 Cから呼べるMockですかぁ? んーむ…
しばらく考えてたんだけど、あまりにメンドクセーので断念。
かわりに(Cから呼べる)C++で"なんちゃってMock"をこしらえることに。
テスト対象が int target(int) で、こいつがさらに int sub(int) を呼んでるとしよ。
Testコードはこんな感じ:
extern MockContainer<T> expect_sub, actual_sub, return_sub;
vod test_01() {
expect_sub.add(5); // 引数5でsubが呼ばれるハズ
return_sub.add(2); // そんときゃ2を返せ。
CU_ASSERT_EQUAL( target(-5), 4); // target(-5)は4を返すべし
verify( expect_sub, actual_sub); // 期待した引数でsubが呼ばれたの?
}
Mockコードは:
MockContainer<T> expect_sub, actual_sub, return_sub;
extern "C"
int sub(int x) {
actual_sub.add(x); // こんなのもらった。
return return_sub.get();
}
…少なからずぢたばたしておるが、ま、こんなもんぢゃろ。