关闭

玩转Google单元测试框架gtest系列之一:初识gtest

发表于:2010-3-30 14:47

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

 作者:CoderZh    来源:www.cnblogs.com/coderzh

  工程设置后了后,我们来编写一个最简单测试案例试试,我们先来写一个被测试函数:

int Foo(int a, int b)
{
    
if (a == 0 || b == 0)
    {
        
throw "don't do that";
    }
    
int c = a % b;
    
if (c == 0)
        
return b;
    
return Foo(b, c);

  没错,上面的函数是用来求最大公约数的。下面我们就来编写一个简单的测试案例。

#include <gtest/gtest.h>

TEST(FooTest, HandleNoneZeroInput)
{
    EXPECT_EQ(2, Foo(4, 10));
    EXPECT_EQ(6, Foo(30, 18));
}

  上面可以看到,编写一个测试案例是多么的简单。我们使用了TEST这个宏,它有两个参数,官方的对这两个参数的解释为:[TestCaseName,TestName],而我对这两个参数的定义是: [TestSuiteName,TestCaseName],在下一篇我们再来看为什么这样定义。

  对检查点的检查,我们上面使用到了EXPECT_EQ这个宏,这个宏用来比较两个数字是否相等。Google还包装了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的区别是:

      1. EXPECT_*  失败时,案例继续往下执行。

      2. ASSERT_* 失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。

  在下一篇,我们再来具体讨论这些断言宏。为了让我们的案例运行起来,我们还需要在main函数中添加如下代码:

int _tmain(int argc, _TCHAR* argv[])
{
    testing::InitGoogleTest(
&argc, argv);
    
return RUN_ALL_TESTS();
}

  “testing::InitGoogleTest(&argc, argv);” :gtest的测试案例允许接收一系列的命令行参数,因此,我们将命令行参数传递给gtest,进行一些初始化操作。gtest的命令行参数非常丰富,在后面我们也会详细了解到。

  “RUN_ALL_TESTS()” :运行所有测试案例

  OK,一切就绪了,我们直接运行案例试试(一片绿色,非常爽):

  五、总结

  本篇内容确实是非常的初级,目的是让从来没有接触过gtest的同学了解gtest最基本的使用。gtest还有很多更高级的使用方法,我们将会在后面讨论。总结本篇的内容的话:

      1. 使用VS编译gtest.lib文件

      2. 设置测试工程的属性(头文件,lib文件,/MT参数(和编译gtest时使用一样的参数就行了))

      3. 使用TEST宏开始一个测试案例,使用EXPECT_*,ASSER_*系列设置检查点。

      4. 在Main函数中初始化环境,再使用RUN_ALL_TEST()宏运行测试案例。

  优点:

      1. 我们的测试案例本身就是一个exe工程,编译之后可以直接运行,非常的方便。

      2. 编写测试案例变的非常简单(使用一些简单的宏如TEST),让我们将更多精力花在案例的设计和编写上。

      3. 提供了强大丰富的断言的宏,用于对各种不同检查点的检查。

      4. 提高了丰富的命令行参数对案例运行进行一系列的设置。

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号