C++ユニットテストフレームワーク-gtest-1-断言

4905 ワード

0ディレクトリ
  • 1前言
  • 2 bool値検査
  • 3数値型検査
  • 4文字列チェック
  • 5は、成功または失敗を返す
  • を示します.
  • 6異常検査
  • 7 Predicate検査
  • 8浮動小数点検査
  • 1はじめに
    gtestでは,断言マクロはASSERT系列,EXPECT系列の2種類に分類されると理解できる.
  • ASSERT_* チェックポイントが失敗した場合は、現在の関数を終了します(注:現在のケースを終了するわけではありません).EXPECT_* シリーズの断言は、チェックポイントが失敗した場合、引き続き実行されます.

  • 例:
    EXPECT_EQ(3, add(1,2))  //     add      3  
    

    ここで予想される結果が4の場合、次の出力が表示されます.
    g:    : error: Value of: Add(1, 2)
      Actual: 4
    Expected:3
    

    自動出力のエラー情報に不満がある場合は、オペレータ<<でカスタム情報を出力することもできます.通常、これはデバッグやチェックポイントの補足説明に役立ちます.
    次に例を示します.
    for (int i = 0; i < x.size(); ++i)
    {
        EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
    }
    

    これにより、エラー情報の位置決めが容易になります.
    2 bool値チェック
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_TRUE(条件式)
    EXPECT_TRUE(条件式)
    (条件式)is true
    ASSERT_FALSE(条件式)
    EXPECT_FALSE(条件式)
    (条件式)is false
    3数値型検査
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_EQ(expected, actual);
    EXPECT_EQ(val1, val2);
    expected == actual
    ASSERT_NE(val1, val2);
    EXPECT_NE(val1, val2);
    val1 != val2
    ASSERT_LT(val1, val2);
    EXPECT_LT(val1, val2);
    val1 < val2
    ASSERT_LE(val1, val2);
    EXPECT_LE(val1, val2);
    val1 <= val2
    ASSERT_GT(val1, val2);
    EXPECT_GT(val1, val2);
    val1 > val2
    ASSERT_GE(val1, val2);
    EXPECT_GE(val1, val2);
    val1 >= val2
    4文字列チェック
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_STREQ(expected_str, actual_str);
    EXPECT_STREQ(val1, val2);
    2文字列が同じ
    ASSERT_STRNE(str1, str2);
    EXPECT_STRNE(val1, val2);
    2文字列が異なる
    ASSERT_STRCASEEQ(expected_str, actual_str);
    EXPECT_STRCASEEQ(val1, val2);
    大文字と小文字を無視し、2文字列が同じ
    ASSERT_STRCASENE(str1, str2);
    EXPECT_STRCASENE(val1, val2);
    大文字と小文字を無視して2文字列が異なる
    STREQとSTRNEはchar*とwchar_を同時にサポートt*タイプの、STRCASEEQとSTRCASENEはchar*しか受信していないので、あまり使わないのではないでしょうか.次の例を示します.
    5戻り成功または失敗を表示
    直接復帰成功:SUCCEED();失敗を返す場合は、致命的な断言(FAIL();)と非致命的な断言(ADD_FAILURE();)
    6異常検査
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_THROW(文、異常タイプ);
    EXPECT_THROW(文、異常タイプ);
    文に指定されたコードは、指定された例外を放出します.
    ASSERT_ANY_THROW(文);
    EXPECT_ANY_THROW(文);
    文に指定されたコードは、例外を放出します.
    ASSERT_NO_THROW(文);
    EXPECT_NO_THROW(文);
    文に指定されたコードは例外を放出しません
    例:
    int Foo(int a, int b)
    {
        if (a == 0 || b == 0)
        {
            throw "don't do that";
        }
        int c = a % b;
        if (c == 0)
            return b;
        return Foo(b, c);
    }
    TEST(FooTest, HandleZeroInput)
    {
        EXPECT_ANY_THROW(Foo(10, 0));
        EXPECT_THROW(Foo(0, 5), char*);
    }
    

    7 Predicate検査
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_PRED1(pred1, val1);
    ASSERT_PRED1(pred1, val1);
    pred 1(val 1)はtrueを返す
    ASSERT_PRED2(pred2, val1, val2);
    ASSERT_PRED2(pred2, val1, val2);
    pred 2(val 1,val 2)はtrueを返す



    例:
    bool MutuallyPrime(int m, int n)
    {
        return Foo(m , n) > 1;
    }
    
    TEST(PredicateAssertionTest, Demo)
    {
        int m = 5, n = 6;
        EXPECT_PRED2(MutuallyPrime, m, n);
    }
    

    入力結果は次のとおりです.
    error: MutuallyPrime(m, n) evaluates to false, where
    m evaluates to 5
    n evaluates to 6
    

    このような出力に不満がある場合は、以下のように出力フォーマットをカスタマイズすることもできます.
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_PRED_FORMAT1(p_format1, val1);
    EXPECT_PRED_FORMAT1(p_format1, val1);
    p_format 1(val 1)成功
    ASSERT_PRED_FORMAT2(p_format2, val1, val2);
    EXPECT_PRED_FORMAT2(p_format2, val1, val2);
    p_format 2(val 1,val 2)成功



    例:
    testing::AssertionResult AssertFoo(const char* m_expr, const char* n_expr, const char* k_expr, int m, int n, int k) {
        if (Foo(m, n) == k)
            return testing::AssertionSuccess();
        testing::Message msg;
        msg << m_expr << "   " << n_expr << "          :" << Foo(m, n) << "    :" << k_expr;
        return testing::AssertionFailure(msg);
    }
    
    TEST(AssertFooTest, HandleFail)
    {
        EXPECT_PRED_FORMAT3(AssertFoo, 3, 6, 2);
    }
    

    失敗した場合、出力される情報は次のとおりです.
    error: 3   6          :3    :2
    

    8浮動小数点検査
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_FLOAT_EQ(expected, actual);
    EXPECT_FLOAT_EQ(expected, actual);
    floatはほぼ等しい
    ASSERT_DOUBLE_EQ(expected, actual);
    EXPECT_DOUBLE_EQ(expected, actual);
    doubleはほぼ等しい
    2つの近い数を比較します.
    Fatal断言
    非Fatalアサーション
    検証#ケンショウ#
    ASSERT_NEAR(val1,val2,abs_error);
    EXPECT_NEAR(val1,val2,abs_error);
    2つの数の差は絶対値absを超えないerror
    また、次の操作も可能です.
    EXPECT_PRED_FORMAT2(testing::FloatLE, val1, val2);
    EXPECT_PRED_FORMAT2(testing::DoubleLE, val1, val2);
    

    その他は
    トップに戻る