データベース接続槽DBPool分析(六):gtest


gtestはgoogleのC++テストフレームで、とても使いやすいです.参考にしましたhttp://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html中の教程はgtestを使います.
google testのユニットテストはTEST()とTEST_だけ必要です.F()二つのマクロ、TEST:一回のテストの最初のパラメータを定義するのはテストケース名で、二つ目のパラメータはテスト名です.
RUN_を通るALL_TESTS()はそれらを実行します.すべてのテストが成功すれば、この関数は0に戻ります.そうでないと1に戻ります.RUN(u)を無視することはできません.ALL_TESTS()の戻り値は、gccでコンパイルエラーが発生します.このような設計の理由は、自動化テストサービスがテスト終了コードに基づいてテストを通過するかどうかを決定し、そのstdout/stder出力によるものではない.したがって、あなたのmain関数はRUN()に返さなければなりません.ALL_TESTS()の値.また、あなたはRUN_だけを呼び出すべきです.ALL_TESTS()は一回.何度もこの関数を呼び出すと、Google Testのいくつかの高次特性(例えば、スレッド安全死亡テストthread-safe death tests)と衝突しますので、サポートされていません.
testing::InitGoogleTest()関数は、解析コマンドラインの着信を担当するGoogle Testフラグは、RUN_uを呼び出している必要があります.ALL_TESTS()を呼び出す前に、表示を正しく初期化できません.
#include "../include/mysql_connection_pool.h"
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <thread>
#include <gtest/gtest.h>

using std::cout;
using std::endl;
using std::thread;

const char* handler(MysqlPool* p_mypool, const char* sql) 
{
    //                   
    MysqlObj* conn = p_mypool->getConnection();

    if(!conn){
        cout << "getConnection NULL pointer" << endl;
        exit(-1);
    }

    QueryResult queryResult; 
    conn->ExecuteSql(sql, queryResult);

    p_mypool->releaseConnection(conn);

    for(int i=0;i<queryResult.getRowCount();i++)
    {
        for(int j=0;j<queryResult.getColumnCount();j++)
        {
            cout << queryResult.getElement(i,j) << " ";
        }
        cout << endl;
    }
    return "hello";
}

TEST(handlerTest, Test1)
{
    MysqlPool mypool;

    EXPECT_STREQ("hello", handler(&mypool, "select * from student"));
}

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
著作権声明:本文はブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません.