單元測試之如何測試模板類

2021-07-02 04:05:47 字數 2304 閱讀 8875

在搜狗內部對於c++專案進行單元測試,基本都是使用gtest進行的。無論是單元測試,還是介面測試我們都做了大量工作。

具體來說,就是對函式進行單元測試或介面測試,對模組進行整合測試。但是,對於模板類並沒有進行測試,而是對其上層呼叫進行測試。

現在的問題是,對於模板類需不需要進行單元測試或介面測試?被寫成模板類,說明這個類是比較通用且很多地方都在使用它,所以我認為還是有必要進行測試的。

下面就直接進入主題:如何對單引數模板類進行測試?

有如下模板類

//不用糾結於**細節,只為說明

template

class queue

void enqueue(const e& element) {}

e* dequeue() {}

size_t size() const

};

那麼使用gtest該如何對該類進行測試呢?

code

//主模板類

template

queue* createqueue();

//全特化版本1

template <>

queue* createqueue()

//全特化版本2

溫馨提醒

如果使用--gtest_filter進行過濾,則不能寫為這樣的形式:

--gtest_filter=queuetest.defaultcons

--gtest_filter=queuetest.*

原因:因為後面帶了

/n,n表示數字,需寫為如下形式:

--gtest_filter=queuetest*

在前面的例子中,被測試模板類只有乙個型別引數,如果是多個型別引數呢,那該如何測試?

兩個型別引數的模板類

//如果有兩個型別引數

template

class que

void enque(const e& el) {}

e* deque() {}

f size() const

};

大家可以靜靜的想幾分鐘,看能不能解決這個問題吧~~

下面就開始討論這個主題:如何對多引數模板類進行測試?

不能照搬前面方案

當被測試模板類有兩個甚至多個型別引數時,再按前面例子的辦法來進行就行不通了,因為gtest模板類測試巨集僅接收乙個模板引數,那該如何處理這個問題呢?

我的解決方案

將多個引數放在乙個結構體裡,做成乙個模板類,將該模板類作為乙個型別。

將多個引數組合成結構體

template

struct params

測試框架隨之也要改變

template

class testx : public testing::test

virtual ~testx()

void setup() {}

void teardown() {}

// index為被測試模板類

index* const m_i;

};

改變需要測試的型別列表的寫法

typedef testing::types, params> impls;

測試用例書寫方式也需要更改

typed_test_case(testx, impls);

typed_test(testx, defaultcons)

就這麼多了,我想你應該已掌握了測試模板類的鑰匙了,有任何疑問和想法,請

,我們一起溝通、學習、成長!

單元測試之Django單元測試

每個應用,自帶tests.py 整合在django的專案檔案裡,更多是開發人員寫django自動的測試執行 3.1 前後置方法執行特點 django.test.testcase類主要由前 後置處理方法和test開頭的方法組成 特點 繼承於django.test.testcase 測試用例都是test...

單元測試案例模板

專案組裡面突然說,開發人員要進行單元測試,並且要編寫單元測試報告,然後才能放到測試環境,讓測試去進行內部測試,否則連測試環境都不能上,作為一名開發,對自己開發的功能進行單元測試是十分有必要的。千萬不要以為測試就全是測試人員的工作,特別是自己開發的功能必須要自己測試過很多次之後,在讓測試人員來測試,不...

單元測試測試之unittest

首先我們先理解單元測試是誰做的 開發 然後我們測試會寫 之後,我們也可以自己做單元測試 那麼單元測試是做什麼?對某個功能去測試 單元測試測試什麼?類裡面的方法 單元測試怎麼測?建立物件 呼叫方法 傳參 通過傳遞多組資料來測試不同的情況 單元測試的框架有 unittest 和 pytest 學會了un...