日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > 單元測(cè)試之如何測(cè)試模板類(lèi)

單元測(cè)試之如何測(cè)試模板類(lèi)

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-06-27 07:44:11 閱讀次數(shù):4384次

1、背景


在搜狗內(nèi)部對(duì)C++項(xiàng)目進(jìn)行單元測(cè)試,基本都是使用gtest進(jìn)行的。不管是單元測(cè)試,還是接口測(cè)試我們都做了大量工作。

具體來(lái)講,就是對(duì)函數(shù)進(jìn)行單元測(cè)試或接口測(cè)試,對(duì)模塊進(jìn)行集成測(cè)試。但是,對(duì)模板類(lèi)并沒(méi)有進(jìn)行測(cè)試,而是對(duì)其上層調(diào)用進(jìn)行測(cè)試。

現(xiàn)在的問(wèn)題是,對(duì)模板類(lèi)需不需要進(jìn)行單元測(cè)試或接口測(cè)試?被寫(xiě)成模板類(lèi),說(shuō)明這個(gè)類(lèi)是比較通用且很多地方都在使用它,所以我認(rèn)為還是有必要進(jìn)行測(cè)試的。


2、如何測(cè)試單參數(shù)模板類(lèi)

下面就直接進(jìn)入主題:如何對(duì)單參數(shù)模板類(lèi)進(jìn)行測(cè)試?

有以下模板類(lèi)

//不用糾結(jié)于代碼細(xì)節(jié),只為說(shuō)明

template <typename E>

class Queue

{

public:

Queue() {}

void Enqueue(const E& element) {}

E* Dequeue() {}

size_t size() const

{

return (size_t)123;

}

};

那末使用gtest該如何對(duì)該類(lèi)進(jìn)行測(cè)試呢?

1構(gòu)建工廠類(lèi),用于創(chuàng)建被測(cè)試類(lèi)

code

//主模板類(lèi)

template <class T>

Queue<T>* CreateQueue();

//全特化版本1

template <>

Queue<int>* CreateQueue<int>()

{

return new Queue<int>;

}

//全特化版本2

template <>

Queue<char>* CreateQueue<char>()

{

return new Queue<char>;

}


2編寫(xiě)測(cè)試類(lèi)

code

template <class T>

class QueueTest : public testing::Test

{

protected:

QueueTest() : queue(CreateQueue<T>())

{}

virtual ~QueueTest()

{

delete queue;

}

Queue<T>* const queue;

};


3定義需要測(cè)試的類(lèi)型

code typedef testing::Types<int, char> Impls;


4編寫(xiě)測(cè)試用例

code

TYPED_TEST_CASE(QueueTest, Impls);

TYPED_TEST(QueueTest, DefaultCons)

{

EXPECT_EQ(123, this->queue->size());

}


5運(yùn)行用例結(jié)果以下圖


溫馨提示

如果使用--gtest_filter進(jìn)行過(guò)濾,則不能寫(xiě)為這樣的情勢(shì):

--gtest_filter=QueueTest.DefaultCons

--gtest_filter=QueueTest.*

緣由:由于后面帶了/n,n表示數(shù)字,需寫(xiě)為以下情勢(shì):

--gtest_filter=QueueTest*


在前面的例子中,被測(cè)試模板類(lèi)只有1個(gè)類(lèi)型參數(shù),如果是多個(gè)類(lèi)型參數(shù)呢,那該如何測(cè)試?


兩個(gè)類(lèi)型參數(shù)的模板類(lèi)

//如果有兩個(gè)類(lèi)型參數(shù)

template <class E, class F>

class Que

{

public:

Que() {}

void Enque(const E& el) {}

E* Deque() {}

F size() const

{

return (F)123;

}

};


大家可以靜靜的想幾分鐘,看能不能解決這個(gè)問(wèn)題吧~~


3、如何測(cè)試多參數(shù)模板類(lèi)

下面就開(kāi)始討論這個(gè)主題:如何對(duì)多參數(shù)模板類(lèi)進(jìn)行測(cè)試?

不能照搬前面方案當(dāng)被測(cè)試模板類(lèi)有兩個(gè)乃至多個(gè)類(lèi)型參數(shù)時(shí),再按前面例子的辦法來(lái)進(jìn)行就行不通了,由于gtest模板類(lèi)測(cè)試宏僅接收1個(gè)模板參數(shù),那該如何處理這個(gè)問(wèn)題呢?


我的解決方案

將多個(gè)參數(shù)放在1個(gè)結(jié)構(gòu)體里,做成1個(gè)模板類(lèi),將該模板類(lèi)作為1個(gè)類(lèi)型。


將多個(gè)參數(shù)組合成結(jié)構(gòu)體 template <class A, class B>

struct Params

{

typedef typename A TypeA;

typedef typename B TypeB;

}


測(cè)試框架隨之也要改變

template <class T>

class TestX : public testing::Test

{

protected:

TestX() : m_i(CreateIndex<typename T::TypeA, typename T::TypeB())

{}

virtual ~TestX()

{

delete m_i;

}

void Setup() {}

void TearDown() {}

// Index為被測(cè)試模板類(lèi)

Index<typename T::TypeA, typename T::TypeB>* const m_i;

};


生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
為碼而活
積分:4237
15粉絲
7關(guān)注
欄目熱點(diǎn)
關(guān)閉
程序員人生
主站蜘蛛池模板: 中日韩在线观看 | 中文字幕在线国产 | 国产精品1区2区 | 深夜视频一区二区 | 久久人人97超碰精品888 | 久久久青草婷婷精品综合日韩 | 国产精品成人一区二区网站软件 | 亚洲第一在线视频 | 国产成人精品a视频一区www | 男女国产视频 | 国产精品成av人在线视午夜片 | 国产网站在线免费观看 | 久久久久久久国产精品视频 | 天天影院色 | 在线国产一区二区 | 日韩欧美高清 | 在线免费av网址 | 99久视频 | 精品成人| www.嫩草 | 最近中文字幕视频大全 | 色婷婷激情av | 日韩欧美一区二区三区免费观看 | 免费在线播放av | 亚洲国产一区二区三区 | 在线91观看 | 免费久草在线 | 亚洲成人av综合 | 黄色国产 | 欧美不卡在线 | 国产精品一区二区三区在线 | 国产精品成人3p一区二区三区 | 一区二区三区在线播放 | 久久99精品久久久久久久青青日本 | 国产成人精品综合 | 日韩一区二区精品 | 在线一区二区欧美 | 久久精品亚洲一区二区三区浴池 | 精品无码久久久久久国产 | 涩涩视频 | 澳门永久av免费网站 |