搞了3個禮拜的單元測試了,把最近所學所用的東西記錄一下,順便爲公司接下來要做的單元測試培訓做下背書。
首先什麼是單元測試。
在面向對象編程中,通常一個類會承擔一個單一的職責,所以我們可以用類來劃分單元。單元測試,就是針對項目中的各個類進行測試。它側重於發現單元內部的邏輯錯誤,屬於白盒測試的範疇。
單元測試強調以下幾點:
語句覆蓋:選擇足夠的測試數據,使得代碼的每個語句都至少被執行一次。
判定覆蓋:選擇足夠的測試數據,使得程序的每個判定條件都至少出現一次真值和一次假值。
條件覆蓋:使得每一個判斷語句的每個邏輯條件可能的值至少出現一次。
條件組合覆蓋:即當一個判定條件由多個條件組合二成時,使得每個條件的各種可能的組合都出現一次。
數據覆蓋:即用盡可能多的數據傳入接口中進行測試。
單元測試入口。
在c++中,任何程序都需要main函數,gtest同理,下面是單元測試的入口main。
#include <gtest/gtest.h>
int main(int argc,char **argv)
{
test::InitGoogleTest(&argc,argv); //初始化gtest
return RUN_ALL_TESTS(); //運行程序中所有的測試用例
}
測試用例編寫。
首先我們得有一個接口:
int sum(int a,int b)
{
sum = a + b;
if(sum > 100)
return 100;
return sum;
}
測試用例:
TEST(calculate,test_sum)
{
EXPECT_EQ(8,sum(5,3));
EXPECT_EQ(100,sum(60,40));
EXPECT_EQ(100,sum(150,50));
}
EXPECT_EQ(expected,actual),這個斷言用來判斷actual與expected是否相等。expected是預期值,actual是實際值。
當二者相等時,測試通過。
就是這麼簡單。