国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

Google開源C++單元測試框架gTest 3:消息機制

2019-11-07 23:19:25
字體:
來源:轉載
供稿:網友

一、前言

gtest提供了多種事件機制,非常方便我們在案例之前或之后做一些操作。總結一下gtest的事件一共有3種:

1. 全局的,所有案例執行前后。

2. TestSuite級別的,在某一批案例中第一個案例前,最后一個案例執行后。

3. TestCase級別的,每個TestCase前后。

二、全局事件

要實現全局事件,必須寫一個類,繼承testing::Environment類,實現里面的SetUp和TearDown方法。

1. SetUp()方法在所有案例執行前執行

2. TearDown()方法在所有案例執行后執行

復制代碼class FooEnvironment : public testing::Environment{public:    virtual void SetUp()    {        std::cout << "Foo FooEnvironment SetUP" << std::endl;    }    virtual void TearDown()    {        std::cout << "Foo FooEnvironment TearDown" << std::endl;    }};復制代碼

 

當然,這樣還不夠,我們還需要告訴gtest添加這個全局事件,我們需要在main函數中通過testing::AddGlobalTestEnvironment方法將事件掛進來,也就是說,我們可以寫很多個這樣的類,然后將他們的事件都掛上去。

復制代碼int _tmain(int argc, _TCHAR* argv[]){    testing::AddGlobalTestEnvironment(new FooEnvironment);    testing::InitGoogleTest(&argc, argv);    return RUN_ALL_TESTS();}復制代碼

 

三、TestSuite事件

我們需要寫一個類,繼承testing::Test,然后實現兩個靜態方法

1. SetUpTestCase() 方法在第一個TestCase之前執行2. TearDownTestCase() 方法在最后一個TestCase之后執行復制代碼class FooTest : public testing::Test { PRotected:  static void SetUpTestCase() {    shared_resource_ = new ;  }  static void TearDownTestCase() {    delete shared_resource_;    shared_resource_ = NULL;  }  // Some expensive resource shared by all tests.  static T* shared_resource_;};復制代碼
在編寫測試案例時,我們需要使用TEST_F這個宏,第一個參數必須是我們上面類的名字,代表一個TestSuite。復制代碼TEST_F(FooTest, Test1) {    // you can refer to shared_resource here }TEST_F(FooTest, Test2) {    // you can refer to shared_resource here }復制代碼

四、TestCase事件 

TestCase事件是掛在每個案例執行前后的,實現方式和上面的幾乎一樣,不過需要實現的是SetUp方法和TearDown方法:

1. SetUp()方法在每個TestCase之前執行

2. TearDown()方法在每個TestCase之后執行

復制代碼class FooCalcTest:public testing::Test{protected:    virtual void SetUp()    {        m_foo.Init();    }    virtual void TearDown()    {        m_foo.Finalize();    }    FooCalc m_foo;};TEST_F(FooCalcTest, HandleNoneZeroInput){    EXPECT_EQ(4, m_foo.Calc(12, 16));}TEST_F(FooCalcTest, HandleNoneZeroInput_Error){    EXPECT_EQ(5, m_foo.Calc(12, 16));}復制代碼

 

五、總結

gtest提供的這三種事件機制還是非常的簡單和靈活的。同時,通過繼承Test類,使用TEST_F宏,我們可以在案例之間共享一些通用方法,共享資源。使得我們的案例更加的簡潔,清晰。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 西吉县| 鸡东县| 樟树市| 本溪| 平陆县| 平顶山市| 五台县| 甘肃省| 黎川县| 密云县| 博客| 嫩江县| 揭西县| 剑阁县| 乐都县| 凤庆县| 阳山县| 延吉市| 长丰县| 诸暨市| 昌图县| 喀什市| 龙岩市| 白朗县| 荥阳市| 铜陵市| 泗洪县| 田东县| 嘉义县| 永寿县| 玉溪市| 兰坪| 泰安市| 乌海市| 巴彦淖尔市| 洛隆县| 胶南市| 西昌市| 同仁县| 子洲县| 沙坪坝区|