LoginSignup
3
3

More than 3 years have passed since last update.

GoogleTestチートシート(一部)

Last updated at Posted at 2019-11-25

※この記事は 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));
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3