組込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