如何用googletest写C++单元测试

发表于:2013-8-27 11:01

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

 作者:scut1135    来源:51Testing软件测试网采编

  代码很简单:

class CHashTableTest : public ::testing::Test {
protected:
 CHashTableTest():ht(100){

 }
 virtual void SetUp() {
  key1 = "testkey1";
  key2 = "testkey2";
 }

 // virtual void TearDown() {}
 CHashTable ht;

 string key1;
 string key2;
};

  然后开始写测试用例,用例里可以直接使用上面类中的成员。

TEST_F(CHashTableTest, hashfunc)
{
 CHashElement he;

 ASSERT_NE(\
   ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
   ht.getHashKey((char*)key2.c_str(), key2.size(), 0));

 ASSERT_NE(\
   ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
   ht.getHashKey((char*)key1.c_str(), key1.size(), 1));

 ASSERT_EQ(\
   ht.getHashKey((char*)key1.c_str(), key1.size(), 0),\
   ht.getHashKey((char*)key1.c_str(), key1.size(), 0));
}

  注意,TEST_F宏会直接生成一个类,这个类继承自上面我们写的CHashTableTest类。

  gtest提供ASSERT_和EXPECT_系列的宏,用于判断二进制、字符串等对象是否相等、真假等等。这两种宏的区别是,ASSERT_失败了不会往下执行,而EXPECT_会继续。

  3、如何执行单元测试

  首先,我们自己要有一个main函数,函数内容非常简单:

#include "gtest/gtest.h"

int main(int argc, char** argv) {
 testing::InitGoogleTest(&argc, argv);

 // Runs all tests using Google Test.
 return RUN_ALL_TESTS();
}

  InitGoogleTest会解析参数。RUN_ALL_TESTS会把整个工程里的TEST和TEST_F这些函数全部作为测试用例执行一遍。

  执行时,假设我们编译出的可执行文件叫unittest,那么直接执行./unittest就会输出结果到屏幕,例如:

[==========] Running 4 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 4 tests from CHashTableTest
[ RUN      ] CHashTableTest.hashfunc
[       OK ] CHashTableTest.hashfunc (0 ms)
[ RUN      ] CHashTableTest.addget
[       OK ] CHashTableTest.addget (0 ms)
[ RUN      ] CHashTableTest.add2get
testCHashTable.cpp:79: Failure
Value of: getHe->m_pNext==NULL
  Actual: true
Expected: false
[  FAILED  ] CHashTableTest.add2get (1 ms)
[ RUN      ] CHashTableTest.delget
[       OK ] CHashTableTest.delget (0 ms)
[----------] 4 tests from CHashTableTest (1 ms total)

[----------] Global test environment tear-down
[==========] 4 tests from 1 test case ran. (1 ms total)
[  PASSED  ] 3 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] CHashTableTest.add2get

  可以看到,对于错误的CASE,会标出所在文件及其行数。

53/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号