※この記事は https://kunosu.qrunch.io/entries/pLxnlujNy0NXsoHY に移動しました。
GoogleTestの公式チートシートから、よく使うものを記載した。
今後増やす予定。
※ここでは引数の数を 0 から数える。
引数チェック
ポインタ引数が指す値をチェック
Matcherの Pointee(期待値)
でチェックできる。
先にテストケース外で名前空間を宣言しておく。
using ::testing::Pointee;
使い方
// 第2引数が指す値が10であることをチェック
EXPECT_CALL(*myMock, memMovSec(_, _, Pointee(10))).WillOnce(//省略
引数の配列の中身をチェック
Matcherを作成する。
Matcherの戻り値が true
のときテストは成功、 false
のとき失敗する。
MATCHER_P(ArrayPointee, expectArray, "") {
// arg は関数呼び出し時に引数へ渡された値
return (memcmp(arg, expectArray, sizeof(expectArray)) == 0);
}
// サイズ指定もする場合
// 引数の数を増やすときは MATCHER_Pn の n を合わせて増やす
MATCHER_P2(ArrayPointeeSize, expectArray, size, "") {
return (memcmp(arg , expectArray, size) == 0);
}
使い方
byte expectArray[] = {0x11, 0x22, 0x33, 0x44};
// 第0引数の配列がexpectArrayと等しいことをチェック
EXPECT_CALL(*myMock, memSetSec(ArrayPointee(expectArray), 0xFF, 4)).WillOnce(//省略
出力チェック
値の比較
成功条件 | 処理 |
---|---|
expected == actual | EXPECT_EQ(expected, actual); |
expected != actual | EXPECT_NE(expected, actual); |
expected < actual | EXPECT_LT(expected, actual); |
expected <= actual | EXPECT_LE(expected, actual); |
expected > actual | EXPECT_GT(expected, actual); |
expected => actual | EXPECT_GE(expected, actual); |
簡単なスタブを作る
Action を定義する
ACTION(Sum) {
return (arg0 + arg1); // モック関数の0番目と1番目の引数の合計を返す
}
ACTION_P(Plus, n) {
return (arg0 + n); // モック関数の0番目の引数と n との和を返す
}
EXPECT_CALL(*mock, func(_,_)).WillOnce(Sum);
EXPECT_CALL(*mock, func(_,_)).WillOnce(Plus(10));
入力設定
引数が指す先に配列を設定する
以下の関数に対してテスト実行中に引数 inputArr
へ配列を設定する。
void func(char[] inputArr, int size);
Actions の SetArrayArgument<N>(fast, last)
を使う。
- 各要素の意味
-
N
: 引数の位置(0基準) -
fast
: 設定したい配列の先頭アドレス -
last
: 設定したい配列の終端の次のアドレス
-
char inputArr[] = { 0x11, 0x22, 0x33, 0x44 }; //4バイト分の配列
EXPECT_CALL(*testMock, func(_,_)).WillOnce(SetArrayArgument<0>(inputArr, inputArr + sizeof(inputArr)));
出力設定
ポインタ引数に戻り値を設定
以下の関数に対してテスト実行中に引数 output
へ値を設定する。
void func(int input, int size, int *output);
Actions の SetArgPointee<N>(value)
を使う。
- 各要素の意味
-
N
: 引数の位置(0基準) -
value
: 設定したい値
-
// output に5を設定
EXPECT_CALL(*testMock, func(_,_,_)).WillOnce(SetArgPointee<2>(5));