參數值必須是可通過斷言的比較操作符進行比較的,否則你會得到一個編譯錯誤。參數值還必須支持<<操作符來將值輸入到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。
本節中介紹的宏都可以處理窄字符串對象和寬字符串對象(string和wstring)。
有效平臺: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。
簡單的測試
要創建一個測試:
- 使用TEST()宏來定義和命名一個測試函數,它們是一些沒有返回值的普通C++函數。
- 在這個函數中,與你想要包含的其它任何有效C++代碼一起,使用Google Test提供的各種斷言來進行檢查。
- 測試的結果由其中的斷言決定;如果測試中的任意斷言失。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()的第一個參數應該是一樣的。在上面的例子中,我們有兩個測試,HandlesZeroInput和HandlesPostiveInput,它們都屬于同一個測試案例 FactorialTest。
有效平臺: Linux, Windows, Mac.
文章來源于領測軟件測試網 http://www.kjueaiud.com/