单元测试之如何测试模板类
作者:网络转载 发布时间:[ 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());
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11