单元测试之如何测试模板类

发表于:2015-5-05 11:04

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:tianou 搜狗测试    来源:51Testing软件测试网采编

分享:
  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());
  }
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号