• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Google C++ 自动测试框架入门

发布: 2009-5-30 11:26 | 作者: 网络转载 | 来源: 测试时代采编 | 查看: 451次 | 进入软件测试论坛讨论

领测软件测试网

参数值必须是可通过断言的比较操作符进行比较的,否则你会得到一个编译错误。参数值还必须支持<<操作符来将值输入到ostream中。所有的C++内置类型都支持这一点。

这些断言可以用于用户自定义的型别,但你必须重载相应的比较操作符(如==<等)。如果定义有相应的操作符,推荐使用ASSERT_*()宏,因为它们不仅会输出比较的结果,还会输出两个比较对象。

参数表达式总是只被解析一次。因此,参数表达式有一定的副作用(side effect)也是可以接受的。但 是,同其他普通C/C++函数一样,参数表达式的解析顺序是不确定的(如,一种编译器可以自由选择一种 顺序来进行解析),而你的代码不应该依赖于某种特定的参数解析顺序。

ASSERT_EQ()对指针进行的是指针比较。即,如果被用在两个C字符串上,它会比较它们是否指向同样的内存地址,而不是它们所指向的字符串是否有相同值。所以,如果你想对两个C字符串(例如,const char*)进行值比较,请使用ASSERT_STREQ()宏,该宏会在后面介绍到。特别需要一提的是,要验证一个C字符串是否为空(NULL),使用 ASSERT_STREQ(NULL, c_string)。但是要比较两个string对象时,你应该使用ASSERT_EQ

本节中介绍的宏都可以处理窄字符串对象和宽字符串对象(stringwstring)。

有效平台:Linux、Windows、Mac。

字符串比较

该组断言用于比较两个C字符串。如果你想要比较两个string对象,相应地使用EXPECT_EQEXPECT_NE等断言。

致命断言 非致命断言 验证条件
ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expected_str, actual_str); 两个C字符串有相同的内容
ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); 两个C字符串有不同的内容
ASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str, actual_str); 两个C字符串有相同的内容,忽略大小写
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); 两个C字符串有不同的内容,忽略大小写

注意断言名称中出现的“CASE”意味着大小写被忽略了。

*STREQ**STRNE*也接受宽字符串(wchar_t*)。如果两个宽字符串比较失败,它们的值会做为UTF-8窄字符串被输出。

一个NULL空指针和一个空字符串会被认为是不一样的。

有效平台: Linux, Windows, Mac.

参见:更多的字符串比较的技巧(如子字符串、前缀和正则表达式匹配),请参见Advanced Guide Advanced Google Test Guide

简单的测试

要创建一个测试:

  1. 使用TEST()宏来定义和命名一个测试函数,它们是一些没有返回值的普通C++函数。
  2. 在这个函数中,与你想要包含的其它任何有效C++代码一起,使用Google Test提供的各种断言来进行检查。
  3. 测试的结果由其中的断言决定;如果测试中的任意断言失败(无论是致命还是非致命),或者测试崩溃,那么整个测试就失败了。否则,测试通过。
TEST(test_case_name, test_name) {
 
... test body ...
}

TEST()的参数是从概括到特殊的。第一个参数是测试案例的名称,第二个参数是测试案例中的测试的名称。记住,一个测试案例可以包含任意数量的独立测试。一个测试的全称包括了包含它的测试案例名称,及其独立的名称。不同测试案例中的独立测试可以有相同的名称。

举例来说,让我们看一个简单的整数函数:

int Factorial(int n); // Returns the factorial of n

这个函数的测试案例应该看起来像是:

// Tests factorial of 0.
TEST
(FactorialTest, HandlesZeroInput) {
  EXPECT_EQ
(1, Factorial(0));
}

// Tests factorial of positive numbers.
TEST
(FactorialTest, HandlesPositiveInput) {
  EXPECT_EQ
(1, Factorial(1));
  EXPECT_EQ
(2, Factorial(2));
  EXPECT_EQ
(6, Factorial(3));
  EXPECT_EQ
(40320, Factorial(8));
}

Google Test根据测试案例来分组收集测试结果,因此,逻辑相关的测试应该在同一测试案例中;换句话说,它们的TEST()的第一个参数应该是一样的。在上面的例子中,我们有两个测试,HandlesZeroInputHandlesPostiveInput,它们都属于同一个测试案例 FactorialTest

有效平台: Linux, Windows, Mac.

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

42/4<1234>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网