单元测试之如何测试模板类
作者:网络转载 发布时间:[ 2015/5/5 14:02:03 ] 推荐标签:软件测试
5、运行用例,结果如下图

温馨提醒
如果使用--gtest_filter进行过滤,则不能写为这样的形式:
--gtest_filter=QueueTest.DefaultCons
--gtest_filter=QueueTest.*
原因:因为后面带了 /n,n表示数字,需写为如下形式:
--gtest_filter=QueueTest*
在前面的例子中,被测试模板类只有一个类型参数,如果是多个类型参数呢,那该如何测试?
两个类型参数的模板类
// 如果有两个类型参数
template <class E, class F>
class Que
{
public:
Que() {}
void Enque(const E& el) {}
E* Deque() {}
F size() const
{
return (F)123;
}
};
大家可以静静的想几分钟,看能不能解决这个问题吧~~
三、如何测试多参数模板类
下面开始讨论这个主题:如何对多参数模板类进行测试?
不能照搬前面方案
当被测试模板类有两个甚至多个类型参数时,再按前面例子的办法来进行行不通了,因为gtest模板类测试宏仅接收一个模板参数,那该如何处理这个问题呢?
我的解决方案
将多个参数放在一个结构体里,做成一个模板类,将该模板类作为一个类型。
将多个参数组合成结构体
template <class A, class B>
struct Params
{
typedef typename A TypeA;
typedef typename B TypeB;
}
测试框架随之也要改变
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为被测试模板类
Index<typename T::TypeA, typename T::TypeB>* const m_i;
};
改变需要测试的类型列表的写法
typedef testing::Types<Params<int, int>, Params<char, char> > Impls;
测试用例书写方式也需要更改
TYPED_TEST_CASE(TestX, Impls);
TYPED_TEST(TestX, DefaultCons)
{
// 如果需要使用类型,需要写如下代码
typename TypeParam::TypeA sA;
typename TypeParam::TypeB sB;
ASSERT_EQ(0, this->m_i->length());
}

sales@spasvo.com