官方文檔
介紹的比較詳細(xì)的博客
二、獲取Gtest參考
三、使用 (一)qt項(xiàng)目導(dǎo)入Gtest在項(xiàng)目中創(chuàng)建下面兩個(gè)文件夾:
或者在這里獲取跟我一樣的依賴
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
# 項(xiàng)目根目錄
CPP_ROOT = $${PWD}
# include 所在目錄
INC_PATH = $${CPP_ROOT}/include
# lib所在目錄
LIB_PATH = $${CPP_ROOT}/lib
# 導(dǎo)入依賴,注意-L 和 -l 是有含義的。詳細(xì):https://blog.csdn.net/weixin_42156552/article/details/121871417
INCLUDEPATH += $$INC_PATH/gtest
LIBS += -L$$LIB_PATH/-lgtest
SOURCES += main.cpp
(三)一個(gè)簡(jiǎn)單的例子#include#includeusing namespace std;
//一個(gè)測(cè)試,里面的參數(shù)表示這個(gè)測(cè)試屬于那個(gè)分組的。如果不會(huì)(簡(jiǎn)單的使用一下),名字可以隨便寫。
TEST(a1, b2)
{int a = 2;
int b = 1;
//判斷a是不是等于b ,如果不等于會(huì)輸出 "a!=b" 。EXPECT_EQ 是有特定含義的,用來(lái)判斷是否相等
EXPECT_EQ(a, b)<< "a!=b" ;
}
int main(int argc, char* argv[])
{//固定代碼 啟動(dòng)gtest
testing::InitGoogleTest(&argc, argv);
//運(yùn)行所有測(cè)試(符合條件的)用例
return RUN_ALL_TESTS();
}
(四)EXPECT(期望)和ASSERT(斷言)介紹上面的例子中的EXPECT_EQ(a,b) 可以理解為期望a和b相等。
EXPECT 和 ASSERT 可以看作是測(cè)試類型的兩大分類。EXPECT 類型的測(cè)試如果條件不滿足,會(huì)繼續(xù)執(zhí)行接下來(lái)的測(cè)試。ASSERT 如果遇到一個(gè)不滿足的,就會(huì)停止整個(gè)測(cè)試 ,注意:ASSERT 是停止一個(gè){}中的所以測(cè)試。
,不會(huì)繼續(xù)運(yùn)行其他測(cè)試。
#include#includeusing namespace std;
//一個(gè)測(cè)試,里面的參數(shù)表示這個(gè)測(cè)試屬于那個(gè)分組的。如果不會(huì)(簡(jiǎn)單的使用一下),名字可以隨便寫。
TEST(a1, b1)
{int a = 2;
int b = 1;
EXPECT_EQ(2, 1)<< "2!=1" ;
EXPECT_EQ(3, 1)<< "3!=1" ;
//判斷a是不是等于b ,如果不等于會(huì)輸出 "a!=b" EXPECT_EQ 是有特定含義的。用來(lái)判斷是否相等
//遇到斷言不滿足,停止運(yùn)行
ASSERT_EQ(a, b)<< "a!=b" ;
EXPECT_EQ(4, 1)<< "4!=1" ;
//ASSERT_EQ(a, b)<< "a!=b" ;
}
//如果b1測(cè)試中的斷言為flase,不會(huì)影響b2測(cè)試的進(jìn)行,只會(huì)影響b1后面的測(cè)試。
TEST(a1, b2)
{EXPECT_EQ(2, 1)<< "2!=1" ;
EXPECT_EQ(3, 1)<< "3!=1" ;
}
int main(int argc, char* argv[])
{//固定代碼 啟動(dòng)gtest
testing::InitGoogleTest(&argc, argv);
//運(yùn)行所有測(cè)試(符合條件的)用例
return RUN_ALL_TESTS();
}
ASSERT_EQ(a, b)<< “a!=b” ; 在 EXPECT_EQ(4, 1)<< “4!=1” ; 之前測(cè)試,結(jié)果為:
ASSERT_EQ(a, b)<< “a!=b” 在之后
如下:
更多查看官網(wǎng),跳轉(zhuǎn)
參考官方文檔
1、TESTTEST(TestSuiteName, TestName)
{}
在測(cè)試套件 TestSuiteName 中定義一個(gè)名為 TestName 的單個(gè)測(cè)試,該測(cè)試由給定的語(yǔ)句組成。
參數(shù) TestSuiteName 和 TestName 都必須是有效的C++標(biāo)識(shí)符,并且不得包含下劃線 ()。不同測(cè)試套件中的測(cè)試可以具有相同的單個(gè)名稱。
測(cè)試主體中的語(yǔ)句可以是任何受測(cè)代碼。測(cè)試機(jī)構(gòu)中使用的斷言決定了測(cè)試的結(jié)果。
第一個(gè)參數(shù) TestSuiteName,為測(cè)試組的名字,一般將相同類型的測(cè)試分成一組,名字可以隨意取,但是命名要符合規(guī)范。
第二個(gè)參數(shù) TestName,為該測(cè)試的名字,是唯一的,不能重名,名字可以隨意取,但是命名要符合規(guī)范。
#include#includeusing namespace std;
//一個(gè)測(cè)試,里面的參數(shù)表示這個(gè)測(cè)試屬于那個(gè)分組的。如果不會(huì)(簡(jiǎn)單的使用一下),名字可以隨便寫。
//a1組中的,b1測(cè)試
TEST(a1, b1)
{int a = 2;
int b = 1;
EXPECT_EQ(2, 1)<< "2!=1" ;
EXPECT_EQ(3, 1)<< "3!=1" ;
//判斷a是不是等于b ,如果不等于會(huì)輸出 "a!=b" EXPECT_EQ 是有特定含義的。用來(lái)判斷是否相等
//遇到斷言不滿足,停止運(yùn)行
//ASSERT_EQ(a, b)<< "a!=b" ;
EXPECT_EQ(4, 1)<< "4!=1" ;
ASSERT_EQ(a, b)<< "a!=b" ;
}
//a1組中的,b2測(cè)試
TEST(a1, b2)
{int a = 2;
int b = 1;
EXPECT_EQ(2, 1)<< "2!=1" ;
EXPECT_EQ(3, 1)<< "3!=1" ;
//判斷a是不是等于b ,如果不等于會(huì)輸出 "a!=b" EXPECT_EQ 是有特定含義的。用來(lái)判斷是否相等
//遇到斷言不滿足,停止運(yùn)行
//ASSERT_EQ(a, b)<< "a!=b" ;
EXPECT_EQ(4, 1)<< "4!=1" ;
ASSERT_EQ(a, b)<< "a!=b" ;
}
int main(int argc, char* argv[])
{//固定代碼 啟動(dòng)gtest
testing::InitGoogleTest(&argc, argv);
//運(yùn)行所有測(cè)試(符合條件的)用例
return RUN_ALL_TESTS();
}
2、TEST_F這種方式需要結(jié)合類使用,繼承Gtest提供的接口類。
TEST_F(TestFixtureName, TestName) {}
定義一個(gè)名為 TestName 的單個(gè)測(cè)試,該測(cè)試使用測(cè)試夾具類 TestFixtureName。測(cè)試套件名稱為 TestFixtureName。
參數(shù) TestFixtureName(一個(gè)繼承了::testing::Test 的類) 和 TestName 都必須是有效的標(biāo)識(shí)符C++并且不得包含下劃線,不能重名。
#include#include#include "testfixture.h"
using namespace std;
TEST_F(TestFixture, test1)
{EXPECT_EQ(id, 1);
EXPECT_EQ(name, "xiaoming");
}
//將測(cè)試用例存放到 QueueTest里面。能重復(fù)調(diào)用測(cè)試用例
TEST_F(TestFixture, test2)
{EXPECT_EQ(age, 20);
}
int main(int argc, char* argv[])
{//固定代碼 啟動(dòng)gtest
testing::InitGoogleTest(&argc, argv);
//運(yùn)行所有測(cè)試(符合條件的)用例
return RUN_ALL_TESTS();
}
#include "gtest.h"
using namespace std;
class TestFixture : public ::testing::Test
{// Test interface
protected:
//測(cè)試開始前框架會(huì)調(diào)用這個(gè)方法,(初始化測(cè)試數(shù)據(jù))
void SetUp() override;
//測(cè)試完后運(yùn)行這個(gè)方法
void TearDown() override;
public:
TestFixture();
int id = 1;
string name = "lihua";
int age = 18;
};
#include "testfixture.h"
#includeusing namespace std;
TestFixture::TestFixture()
{}
void TestFixture::SetUp()
{cout<< "------------before testing!!!------------"<< endl;
//初始化測(cè)試數(shù)據(jù)
id = 2;
name = "xiaoming";
age = 12;
}
void TestFixture::TearDown()
{cout<< "-----------after the test!!!--------------"<< endl;
}
運(yùn)行過(guò)程:
(框架創(chuàng)建的對(duì)象)
(在測(cè)試前調(diào)用初始化方法)
沒(méi)搞懂。
TEST_P
其他講解
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧