• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Google C++ 自動測試框架入門

    發布: 2009-5-30 11:26 | 作者: 網絡轉載 | 來源: 測試時代采編 | 查看: 451次 | 進入軟件測試論壇討論

    領測軟件測試網

    參數值必須是可通過斷言的比較操作符進行比較的,否則你會得到一個編譯錯誤。參數值還必須支持<<操作符來將值輸入到ostream中。所有的C++內置類型都支持這一點。

    這些斷言可以用于用戶自定義的型別,但你必須重載相應的比較操作符(如==、<等)。如果定義有相應的操作符,推薦使用ASSERT_*()宏,因為它們不僅會輸出比較的結果,還會輸出兩個比較對象。

    參數表達式總是只被解析一次。因此,參數表達式有一定的副作用(side effect)也是可以接受的。但 是,同其他普通C/C++函數一樣,參數表達式的解析順序是不確定的(如,一種編譯器可以自由選擇一種 順序來進行解析),而你的代碼不應該依賴于某種特定的參數解析順序。

    ASSERT_EQ()對指針進行的是指針比較。即,如果被用在兩個C字符串上,它會比較它們是否指向同樣的內存地址,而不是它們所指向的字符串是否有相同值。所以,如果你想對兩個C字符串(例如,const char*)進行值比較,請使用ASSERT_STREQ()宏,該宏會在后面介紹到。特別需要一提的是,要驗證一個C字符串是否為空(NULL),使用 ASSERT_STREQ(NULL, c_string)。但是要比較兩個string對象時,你應該使用ASSERT_EQ。

    本節中介紹的宏都可以處理窄字符串對象和寬字符串對象(stringwstring)。

    有效平臺:Linux、Windows、Mac。

    字符串比較

    該組斷言用于比較兩個C字符串。如果你想要比較兩個string對象,相應地使用EXPECT_EQ、EXPECT_NE等斷言。

    致命斷言 非致命斷言 驗證條件
    ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expected_str, actual_str); 兩個C字符串有相同的內容
    ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); 兩個C字符串有不同的內容
    ASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str, actual_str); 兩個C字符串有相同的內容,忽略大小寫
    ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); 兩個C字符串有不同的內容,忽略大小寫

    注意斷言名稱中出現的“CASE”意味著大小寫被忽略了。

    *STREQ**STRNE*也接受寬字符串(wchar_t*)。如果兩個寬字符串比較失敗,它們的值會做為UTF-8窄字符串被輸出。

    一個NULL空指針和一個空字符串會被認為是不一樣的。

    有效平臺: Linux, Windows, Mac.

    參見:更多的字符串比較的技巧(如子字符串、前綴和正則表達式匹配),請參見Advanced Guide Advanced Google Test Guide。

    簡單的測試

    要創建一個測試:

    1. 使用TEST()宏來定義和命名一個測試函數,它們是一些沒有返回值的普通C++函數。
    2. 在這個函數中,與你想要包含的其它任何有效C++代碼一起,使用Google Test提供的各種斷言來進行檢查。
    3. 測試的結果由其中的斷言決定;如果測試中的任意斷言失。o論是致命還是非致命),或者測試崩潰,那么整個測試就失敗了。否則,測試通過。
    TEST(test_case_name, test_name) {
     
    ... test body ...
    }

    TEST()的參數是從概括到特殊的。第一個參數是測試案例的名稱,第二個參數是測試案例中的測試的名稱。記住,一個測試案例可以包含任意數量的獨立測試。一個測試的全稱包括了包含它的測試案例名稱,及其獨立的名稱。不同測試案例中的獨立測試可以有相同的名稱。

    舉例來說,讓我們看一個簡單的整數函數:

    int Factorial(int n); // Returns the factorial of n

    這個函數的測試案例應該看起來像是:

    // Tests factorial of 0.
    TEST
    (FactorialTest, HandlesZeroInput) {
      EXPECT_EQ
    (1, Factorial(0));
    }

    // Tests factorial of positive numbers.
    TEST
    (FactorialTest, HandlesPositiveInput) {
      EXPECT_EQ
    (1, Factorial(1));
      EXPECT_EQ
    (2, Factorial(2));
      EXPECT_EQ
    (6, Factorial(3));
      EXPECT_EQ
    (40320, Factorial(8));
    }

    Google Test根據測試案例來分組收集測試結果,因此,邏輯相關的測試應該在同一測試案例中;換句話說,它們的TEST()的第一個參數應該是一樣的。在上面的例子中,我們有兩個測試,HandlesZeroInputHandlesPostiveInput,它們都屬于同一個測試案例 FactorialTest。

    有效平臺: Linux, Windows, Mac.

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    42/4<1234>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>