中易网

如何用googletest写单元测试

答案:2  悬赏:50  
解决时间 2021-03-01 01:01
如何用googletest写单元测试
最佳答案
首先,要有一个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
</pre>
可以看到,对于错误的CASE,会标出所在文件及其行数。</p>
</p>如果我们需要输出到XML文件,则执行./unittest --gtest_output=xml,那么会在当前目录下生成test_detail.xml 文件,内容如下:
</p>
</p><pre name="code" class="cpp"><?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="3" failures="0" disabled="0" errors="0" time="0.001" name="AllTests">
<testsuite name="CHashTableTest" tests="3" failures="0" disabled="0" errors="0" time="0.001">
<testcase name="hashfunc" status="run" time="0.001" classname="CHashTableTest" />
<testcase name="addget" status="run" time="0" classname="CHashTableTest" />
<testcase name="delget" status="run" time="0" classname="CHashTableTest" />
</testsuite>
</testsuites>
如此,一个简单的单元测试写完。因为太简单,所以不需要使用google mock模拟一些依赖。后续我再写结合google mock来写一些复杂的gtest单元测试。
全部回答
googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows、linux、Mac等OS平台上。下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。 本文包括以下几部分:1、获取并编译googletest(以下简称为gtest);2、如何编写单元测试用例;3、如何执行单元测试。4、google test内部是如何执行我们的单元测试用例的。 1. 获取并编译gtest gtest试图跨平台,理论上,它就应该提供多个版本的binary包。但事实上,gtest只提供源码和相应平台的编译方式,这是为什么呢?google的解释是,我们在编译出gtest时,有些独特的工程很可能希望在编译时加许多flag,把编译的过程下放给用户,可以让用户更灵活的处理。这个仁者见仁吧,反正也是免费的BSD权限。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
新浪微博中为什么把url转换成短地址,这样有
一篇属于春天的活动的400字作文 题目自拟
关于中国探月的发展经历
川港镇中心幼儿园怎么去啊,有知道地址的么
8个百是什么意思?
吴均的《与朱元思书》的全文读音、文言文、要
冰枫这个地址在什么地方,我要处理点事
直径5毫米的 CFDI问题严重吗
关于张杰的个人介绍
手机炫舞能在线领点卷吗
公司取名:建筑工地用“吊篮”、“电梯”租赁
青海炫彩时空手机报发送的时间能改吗?
老公出国了,我能给他办个临时身份证吗
春节见闻的一片小短文
武装突袭3内存不能为written
推荐资讯
aptio setup utility 设置
请问坐高铁到葵潭然后再打的士到隆江要多少钱
武汉话“喃子”是什么意思啊?
老王送给王源的生日礼物是
三星现在拨号里面输入什么查生产地啊,手机版
秦北路/顺沙路(路口)在什么地方啊,我要过去
辛庄子村地址在哪,我要去那里办事
朋友送的书法一幅想知道这章是什么名字
新文达广告地址在哪,我要去那里办事
挖掘机大灯线路的2根线碰在一起了,现在灯不亮
空气净化器对电脑显示器有没有干扰?
魔兽世界 7.3.5职业
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?