sioaji2012のブログ

普段は組み込み開発でC言語のみです。主にプログラムや勉強日記です

組込C言語でUnitTest 4 簡単なテスト

GoogleTestで簡単なテストです。

テスト対象の関数

sum.c

#include "sum.h"

int sum(int a, int b)
{
  return (a+b);
}

sum.h

#ifndef SUM_H_
#define SUM_H_

extern int sum(int a, int b);

#endif //SUM_H_

テスト用のMain関数

Main関数ファイルを別に作成しておきます。

TestMain.cpp

#include <stdio.h>
#include "gtest/gtest.h"
#include "gmock/gmock.h"

int main(int argc, char** argv) {
    printf("■GoogleTestを開始しました\n");
  // 以下の行は,テスト開始前に Google Mock (と Google Test)
  // を初期化するために必ず実行する必要があります.
  ::testing::InitGoogleMock(&argc, argv);
  return RUN_ALL_TESTS();
}

テストコード

SumTestという名前のテストケースに、

・add1という名前の加算テストと

・minus1という名前の減算テスト

を書きました。

それぞれ、

1+2=3

2-1=1

をテストする簡単なテストを書きました。

★テストする関数sumがC++のリンカーから見える様に、extern "C" でヘッダファイルのインクルードを囲みます。

#include <stdio.h>
#include "gtest/gtest.h"
#include "gmock/gmock.h"

extern "C" {
#include "sum.h"
}

namespace {

// テスト対象となる関数 Sum のためのフィクスチャ
class SumTest : public ::testing::Test {
protected:
// 以降の関数で中身のないものは自由に削除できます.

    // コンストラクタ(初期化用)
    SumTest()
    {// テスト毎に実行される set-up をここに書きます.
        printf("[ 初期化   ]\n");
    }

    // デストラクタ(終了処理用)
    virtual ~SumTest()
    {// テスト毎に実行される,例外を投げない clean-up をここに書きます.
        printf("[ 終了処理 ]\n");

    }

    // コンストラクタとデストラクタでは不十分な場合.
    // 以下のメソッドを定義することができます:

    virtual void SetUp()
    {// このコードは,コンストラクタの直後(各テストの直前)に呼び出されます.
        printf("[ SetUp    ]\n");
    }

    virtual void TearDown()
    {// このコードは,各テストの直後(デストラクタの直前)に呼び出されます.
        printf("[ TearDown ]\n");

    }
// ここで宣言されるオブジェクトは,テストケース内の全てのテストで利用できます.
};

TEST_F(SumTest, add1)
{
    printf("■加算テスト\n");
    EXPECT_EQ(3, sum(1, 2) );
}

TEST_F(SumTest, minus1)
{
    printf("■減算テスト\n");
    EXPECT_EQ(1, sum(2, -1) );
}

}// namespace

テスト結果

■GoogleTestを開始しました
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from SumTest
[ RUN      ] SumTest.add1
[ 初期化   ]
[ SetUp    ]
■加算テスト
[ TearDown ]
[ 終了処理 ]
[       OK ] SumTest.add1 (0 ms)
[ RUN      ] SumTest.minus1
[ 初期化   ]
[ SetUp    ]
■減算テスト
[ TearDown ]
[ 終了処理 ]
[       OK ] SumTest.minus1 (0 ms)
[----------] 2 tests from SumTest (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (0 ms total)
[  PASSED  ] 2 tests.

わざと失敗させた結果はこちら

テストコード

TEST_F(SumTest, add1)
{
    printf("■加算テスト\n");
    EXPECT_EQ(3, sum(1, 3));
}

TEST_F(SumTest, minus1)
{
    printf("■減算テスト\n");
    EXPECT_EQ(1, sum(2, -3) );
}

テスト結果

■GoogleTestを開始しました
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from SumTest
[ RUN      ] SumTest.add1
[ 初期化   ]
[ SetUp    ]
■加算テスト
../src/CheckTest.cpp:49: Failure
Expected equality of these values:
  3
  sum(1, 3)
    Which is: 4
[ TearDown ]
[ 終了処理 ]
[  FAILED  ] SumTest.add1 (0 ms)
[ RUN      ] SumTest.minus1
[ 初期化   ]
[ SetUp    ]
■減算テスト
../src/CheckTest.cpp:55: Failure
Expected equality of these values:
  1
  sum(2, -3)
    Which is: -1
[ TearDown ]
[ 終了処理 ]
[  FAILED  ] SumTest.minus1 (0 ms)
[----------] 2 tests from SumTest (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (0 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 2 tests, listed below:
[  FAILED  ] SumTest.add1
[  FAILED  ] SumTest.minus1

 2 FAILED TESTS