隨著微服務和CI的流行,在目前的軟件工程領域中單元測試可以說是必不可少的一個環(huán)節(jié),在TDD中,單元測試更是被提高到了一個新的高度。但是很多公司由于很多不同的原因,沒有能持續(xù)維護,或者干脆就從來沒有寫過單元測試,確實,單元測試在初期和代碼維護期會需要花一些投入,但是,如果一個項目是需要長期維護和更新的,那么單元測試的作用,相對于投入來說就根本不算什么。見過很多人寫的單元測試,雖然也可以運行,也有覆蓋率,但是稍微分析一下就會看出來,那根本就不是單元測試,而已經(jīng)是集成測試,比如有人竟然要在單元測試中訪問網(wǎng)絡,寫文件,甚至讀寫數(shù)據(jù)庫。。

那么什么樣的數(shù)據(jù)庫是好的單元測試呢,根據(jù)筆者的經(jīng)驗,以下幾點可能是必須的:
1. 運行速度快,對于一個有幾百個單元測試用例的測試來說,我期待1-2分鐘內可以運行完成,應為如果我在重構代碼,這可以讓我在很快的時間內得到反饋。
2. 不要依賴外部因素,單元測試只針對單一函數(shù)功能測試
3. 一個用例只測試一個函數(shù)
對于其中的第二點,可能是比較麻煩的,因為,如果一個函數(shù)是類型的成員函數(shù),那么很可能會依賴很多內部的成員變量,這種情況就是mock出場的時候了,因為使用mock才能讓我們專注于自己函數(shù)一業(yè)務邏輯的測試,而將依賴隔離開。筆者使用過很多種語言的mock庫,用的最順手的還是Java的mokito, 當然c++ 語言也有很多類似的產(chǎn)品,比如gmock, fake it, 但是其局限性確實比較多,如果不在代碼開始階段了解,并且做好計劃,后期想加入單元測試,并且使用gmock的時候可能就會追悔莫及,大動干戈,下面我們來分場景分析一下這些局限性。
場景1:
class TurtleReal {
public:
void PenUp()
{
}
void PenDown()
{
}
};
class MockTurtleReal : public TurtleReal {
public:
MOCK_METHOD0(PenUp, void());
MOCK_METHOD0(PenDown, void());
};
class PainterdReal
{
TurtleReal* turtle;
public:
PainterdReal(TurtleReal* turtle)
: turtle(turtle) {}
bool DrawCircle(int, int, int) {
turtle->PenDown();
return true;
}
};
TEST(PainterTest, ChildRealCanDrawSomething) {
MockTurtleReal turtle;
EXPECT_CALL(turtle, PenDown())
.Times(AtLeast(1));
PainterdReal painter(&turtle);
EXPECT_TRUE(painter.DrawCircle(0, 0, 10));
}另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站www.chinadenli.net,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:詳解c++種gmock單元測試框架-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://www.chinadenli.net/article48/dcchhp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站營銷、網(wǎng)站內鏈、響應式網(wǎng)站、ChatGPT、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)