gtest參數化測試程式碼範例

來源:互聯網
上載者:User

在玩轉 Google開源C++單元測試架構Google Test系列(gtest)之四 - 參數化中已經介紹過了如何使用gtest進行參數化測試。在twitter上應 @xlinker 的要求,我在這裡提供一個參數化的完整例子。這個例子也是我當初瞭解gtest時寫的,同時這個例子也在《玩轉》系列中出現過。最後,我再附上整個demo工程,裡面有一些其他的樣本,剛開始上手的同學可以直接拿我的demo工程去試,有任何疑問都歡迎提出。以下是使用TEST_P宏進行參數化測試的樣本:

#include "stdafx.h"
#include "foo.h"
#include <gtest/gtest.h>

class IsPrimeParamTest : public::testing::TestWithParam<int>
{

};

// 不使用參數化測試,就需要像這樣寫五次
TEST(IsPrimeTest, HandleTrueReturn)
{
    EXPECT_TRUE(IsPrime(3));
    EXPECT_TRUE(IsPrime(5));
    EXPECT_TRUE(IsPrime(11));
    EXPECT_TRUE(IsPrime(23));
    EXPECT_TRUE(IsPrime(17));
}

// 使用參數化測試,只需要:
TEST_P(IsPrimeParamTest, HandleTrueReturn)
{
    int n =  GetParam();
    EXPECT_TRUE(IsPrime(n));
}

// 定義參數
INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5, 11, 23, 17));

// -----------------------
// 更複雜一點的參數結構

struct NumberPair
{
    NumberPair(int _a, int _b)
    {
        a = _a;
        b = _b;
    }
    int a;
    int b;
};

class FooParamTest : public ::testing::TestWithParam<NumberPair>
{

};

TEST_P(FooParamTest, HandleThreeReturn)
{
    FooCalc foo;
    NumberPair pair = GetParam();
    EXPECT_EQ(3, foo.Calc(pair.a, pair.b));
}

INSTANTIATE_TEST_CASE_P(ThreeReturn, FooParamTest, testing::Values(NumberPair(12, 15), NumberPair(18, 21)));

完整樣本工程:

/Files/coderzh/Code/gtest_demo.rar 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.