搜档网
当前位置:搜档网 › 玩转Google开源C++单元测试框架Google Test

玩转Google开源C++单元测试框架Google Test

玩转Google开源C++单元测试框架Google Test
玩转Google开源C++单元测试框架Google Test

玩转Google开源C++单元测试框架

Google Test

作者:CoderZh(CoderZh的技术博客 - 博客园)

出处:https://www.sodocs.net/doc/3d10796995.html,/

目录

二、断言 (9)

三、事件机制 (18)

四、参数化 (22)

五、死亡测试 (29)

六、运行参数 (35)

七、深入解析gtest (41)

八、打造自己的单元测试框架 (57)

一、一、本篇工程二、如果从下http http http 三、

下载、初识gt 前言

篇将介绍一些程,以及编写下载

果不记得网址下列地址可以p://googlet p://googlet p://googlet 编译

载解压后,

里test

些gtest 的基写一个最简单址, 直接在go 以下载到该最test.google test.google test.google 里面有个

ms 本使用,包括单的测试案例oogle 里搜g 最新版本:

https://www.sodocs.net/doc/3d10796995.html,/f https://www.sodocs.net/doc/3d10796995.html,/f https://www.sodocs.net/doc/3d10796995.html,/f svc 目录:

括下载,安装。

gtest,第一个files/gtest-files/gtest-files/gtest-装,编译,建个就是。目前1.3.0.zip 1.3.0.tar.gz 1.3.0.tar.bz 建立我们第一前gtest 的最新 2

一个测试De 新版本为1.3mo 3.0,

使用VS2编过这里VS2时我误解版本编译gtes 四、下面我们结如1.设

2.设用VS 的同学可2008,打开后过的。

里要提醒一下2008工程,我升级为了V 解了,并不是本,最好保证译之后,在m st.lib 文件。第一个D

面我们开始建们在VS2008如下:

设置gtest 头文设置

gtest.lib 可以直接打开后会提示你升下的是,如果不然你会发现VS2008工程是说只能在V 证gtest 和你msvc 里面的

Demo 建立我们的第8中,新建一文件路径

b

路径

开msvc 里面升级,升完级果你升级为VS 现很郁闷,你程,结果我使S2008中编的测试工程都Debug 或是第一个Demo 一个

Win32 C 面的工程文件级后,我们直S2008的工程你的Demo 使用VS2005编译,在VS2都使用VS20是Release 目o 了,假如之前

Console Ap 件, 如果你在直接编译里面程,那么你的怎么也编不工程建Dem 005中同样可005工程。)目录里看到编前使用的VS

pplication。在使用的是面的“gtest”的测试Dem 过,我也曾折mo,死活编不可以。如果要

编译出来的g S2008编译的

接着就是设置VS2005或是工程,可以mo 最好也是折腾了好久不过。(这里要编译VS20gtestd.lib 或的gtest,那

置工程属性是以直接,当里有人005或是那么,,总

3.Ru 如果前提工程

int {

}

没错#in

untime Libr 果是Release 提是你之前编程设置后了后 Foo(int if (a == {

thro }

int c = if (c == retu return F 错,上面的函clude

e 版本,Runt 编译的gtest 后,我们来编a, int b)= 0 || b =ow "don't a % b; = 0) urn b; Foo(b, c);函数是用来求test/gtest ime Library 也使用了同样编写一个最简单 == 0) do that"; 求最大公约数t.h> y 设为/MT。当样是/MD 选

单测试案例试 的。下面我们当然,其实你选项。 试试,我们先们就来编写一你也可以选择动先来写一个被一个简单的测择动态链接(/M 被测试函数:测试案例。

MD),:

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,一切就绪了,我们直接运行案例试试(一片绿色,非常爽):

五、本篇用。 1 2数就 3 4优点 1 2案例 3 4

系列总结

篇内容确实是gtest 还有很1. 使用VS 编2. 设置测试工就行了))

3. 使用TEST

4. 在Main 函点:

1. 我们的测试

2. 编写测试案例的设计和编

3. 提供了强大

4. 提高了丰富

列链接:

是非常的初级很多更高级的编译gtest.li 工程的属性T 宏开始一个函数中初始化试案例本身就案例变的非常编写上。

大丰富的断言

富的命令行参级,目的是让从的使用方法b 文件

(头文件,l 个测试案例,化环境,再使就是一个ex 常简单(使用言的宏,用于

参数对案例运从来没有接触,我们将会在ib 文件,/M ,使用EXPE 使用RUN_A xe 工程,编译用一些简单的于对各种不同

运行进行一系触过gtest 的在后面讨论。MT 参数(和CT_*,ASSER ALL_TEST()宏译之后可以直的宏如TEST 同检查点的检

系列的设置。

的同学了解g 总结本篇的编译gtest 时R_*系列设置宏运行测试案直接运行,非),让我们将检查。 gtest 最基本的内容的话:时使用一样的置检查点。 案例。 非常的方便。将更多精力花本的使 的参 花在

1.玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

2.玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

3.玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制

4.玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化

5.玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试

6.玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

7.玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest

8.玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架

二、一、这篇类,1. A 2. E 二、// EXP //

假如g:\e o A Exp 如果http

Val A Exp

断言

前言

篇文章主要总一类是ASS ASSERT_* 系XPECT_* 系示例

int 型比较ECT_EQ(3,

如你的Add(1myproject f: Add(1,Actual: 4 ected:3

果是将结果输p://https://www.sodocs.net/doc/3d10796995.html, stcase na

ected: 3]]estcase >

总结gtest 中SERT 系列,系列的断言,系列的断言,,预期值:3 Add(1, 21, 2) 结果为t\c++\gtes 2) 输出到xml 里https://www.sodocs.net/doc/3d10796995.html,/ame ="Demo"ure messag [CDATA[g:dd(1, 2) ]> 相关的宏。PECT 系列。败时,退出当失败时,继续Add(1, 2)会在结果中输estdemo\gt 输出:(关于rchive/2009"run" time of: Add(1ct\c++\gte gtest 中,断一个直观的解当前函数(注往下执行。

输出:

testdemo.c 于将结果输出为9/04/10/14e ="0" clas 1, 2) Ac estdemo\gt 断言的宏可以解释就是:

注意:并非退cpp(16): e 为xml,见432789.htm ssname ="Ad tual: 4 Ex testdemo\g 以理解为分为退出当前案例error: Val :ml ) ddTest"> xpected: 3gtestdemo.为两)。 lu 3.cpp:

如果你对自动输出的出错信息不满意的话,你还可以通过操作符<<将一些自定义的信息输出,通常,这对于调试或是对一些检查点的补充说明来说,非常有用!

下面举个例子:

如果不使用<<操作符自定义输出的话:

for (int i = 0; i < x.size(); ++i)

{

EXPECT_EQ(x[i], y[i]);

}

看到的结果将是这样的,你根本不知道出错时 i 等于几:

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(25): error: Valu

e of: y[i]

Actual: 4

Expected: x[i]

Which is: 3

如果使用<<操作符将一些重要信息输出的话:

for (int i = 0; i < x.size(); ++i)

{

EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i; }

从输出结果中就可以定位到在 i = 2 时出现了错误。这样的输出结果看起来更加有用,容易理解:

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(25): error: Valu

e of: y[i]

Actual: 4

Expected: x[i]

Which is: 3

Vectors x and y differ at index 2

三、布尔值检查

Fatal assertion Nonfatal assertion Verifies

ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true

ASSERT_FALSE(condition); EXPECT_FALSE(condition);condition is false

四、数值型数据检查

Fatal assertion Nonfatal assertion Verifies

ASSERT_EQ(expected, act ual); EXPECT_EQ(expected, act

ual);

expected== ac

tual

ASSERT_NE(val1, val2); EXPECT_NE(val1, val2); val1!= val2 ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1< val2 ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1<= val2 ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1> val2 ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1>= val2

五、字符串检查

Fatal assertion Nonfatal assertion Verifies

ASSERT_STREQ(ex pected_str,actu al_str); EXPECT_STREQ(expect

ed_str,actual_str);

the two C strings have the same

content

ASSERT_STRNE(st r1, str2); EXPECT_STRNE(str1,

str2);

the two C strings have different

content

ASSERT_STRCASEE Q(expected_str,EXPECT_STRCASEEQ(ex

pected_str,actual_s

the two C strings have the same

content, ignoring case

actual_str); tr);

ASSERT_STRCASEN E(str1, str2);EXPECT_STRCASENE(st

r1, str2);

the two C strings have different

content, ignoring case

*STREQ*和*STRNE*同时支持char*和wchar_t*类型的,*STRCASEEQ*和*STRCASENE*却只接收char*,估计是不常用吧。下面是几个例子:

TEST(StringCmpTest, Demo)

{

char* pszCoderZh = "CoderZh";

wchar_t* wszCoderZh = L"CoderZh";

std::string strCoderZh = "CoderZh";

std::wstring wstrCoderZh = L"CoderZh";

EXPECT_STREQ("CoderZh", pszCoderZh);

EXPECT_STREQ(L"CoderZh", wszCoderZh);

EXPECT_STRNE("CnBlogs", pszCoderZh);

EXPECT_STRNE(L"CnBlogs", wszCoderZh);

EXPECT_STRCASEEQ("coderzh", pszCoderZh);

//EXPECT_STRCASEEQ(L"coderzh", wszCoderZh); 不支持

EXPECT_STREQ("CoderZh", strCoderZh.c_str());

EXPECT_STREQ(L"CoderZh", wstrCoderZh.c_str());

}

六、显示返回成功或失败

直接返回成功:SUCCEED();

返回失败:

Fatal assertion Nonfatal assertion

FAIL(); ADD_FAILURE();

TEST(ExplicitTest, Demo)

{

ADD_FAILURE() << "Sorry"; // None Fatal Asserton,继续往下执行。 //FAIL(); // Fatal Assertion,不往下执行该案例。

SUCCEED();

}

七、异常检查

Fatal assertion Nonfatal assertion Verifies

ASSERT_THROW(statement ,exception_type); EXPECT_THROW(statemen

t,exception_type);

statement throws an

exception of the given

type

ASSERT_ANY_THROW(state ment); EXPECT_ANY_THROW(stat

ement);

statement throws an

exception of any type

ASSERT_NO_THROW(statem ent); EXPECT_NO_THROW(state

ment);

statement doesn't

throw any exception

例如:

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);

}

TEST(FooTest, HandleZeroInput) {

EXPECT_ANY_THROW(Foo(10, 0));

EXPECT_THROW(Foo(0, 5), char*);

}

八、Predicate Assertions

在使用EXPECT_TRUE或ASSERT_TRUE时,有时希望能够输出更加详细的信息,比如检查一个函数的返回值TRUE还是FALSE时,希望能够输出传入的参数是什么,以便失败后好跟踪。因此提供了如下的断言:

Fatal assertion Nonfatal assertion Verifies

ASSERT_PRED1(pred1, val1); EXPECT_PRED1(pred1,

val1);

pred1(val1)returns

true

ASSERT_PRED2(pred2, val1, val2); EXPECT_PRED2(pred2,

val1, val2);

pred2(val1,

val2)returns true

... ... ...

Google人说了,他们只提供<=5个参数的,如果需要测试更多的参数,直接告诉他们。下面看看这个东西怎么用。

bool MutuallyPrime(int m, int n)

{

return Foo(m , n) > 1;

}

TEST(PredicateAssertionTest, Demo)

{

int m = 5, n = 6;

EXPECT_PRED2(MutuallyPrime, m, n);

}

当失败时,返回错误信息:

error: MutuallyPrime(m, n) evaluates to false, where

m evaluates to 5

n evaluates to 6

如果对这样的输出不满意的话,还可以自定义输出格式,通过如下:

Fatal assertion Nonfatal assertion Verifies

ASSERT_PRED_FORMAT1(pred _format1, val1);` EXPECT_PRED_FORMAT1(pred

_format1, val1);

pred_format1(val

1)is

successful

ASSERT_PRED_FORMAT2(pred _format2, val1, val2); EXPECT_PRED_FORMAT2(pred

_format2, val1, val2);

pred_format2(val

1, val2)is

successful

... ...

用法示例:

testing::AssertionResult AssertFoo(const char* m_expr, const char* n_ expr, const char* k_expr, int m, int n, int k) {

if (Foo(m, n) == k)

return testing::AssertionSuccess();

testing::Message msg;

msg << m_expr << " 和 " << n_expr << " 的最大公约数应该是:" << Foo (m, n) << " 而不是:" << k_expr;

return testing::AssertionFailure(msg);

}

TEST(AssertFooTest, HandleFail)

{

EXPECT_PRED_FORMAT3(AssertFoo, 3, 6, 2);

}

失败时,输出信息:

error: 3 和 6 的最大公约数应该是:3 而不是:2

是不是更温馨呢,呵呵。

九、浮点型检查

Fatal assertion Nonfatal assertion Verifies

ASSERT_FLOAT_EQ(expected , actual); EXPECT_FLOAT_EQ(expected

, actual);

the

two float value

s are almost equal

ASSERT_DOUBLE_EQ(expecte d, actual); EXPECT_DOUBLE_EQ(expecte

d, actual);

the

two double valu

es are almost equal

对相近的两个数比较:

Fatal assertion Nonfatal

assertion

Verifies

ASSERT_NEAR(val1 , val2,

abs_error); EXPECT_NEAR(val1

, val2,

abs_error);

the difference

between val1and val2doesn'

t exceed the given absolute error

同时,还可以使用:

EXPECT_PRED_FORMAT2(testing::FloatLE, val1, val2);

EXPECT_PRED_FORMAT2(testing::DoubleLE, val1, val2);

十、Windows HRESULT assertions

Fatal assertion Nonfatal assertion Verifies

ASSERT_HRESULT_SUCCEEDE D(expression); EXPECT_HRESULT_SUCCEEDED

(expression);

expression is a

success HRESULT

ASSERT_HRESULT_FAILED(e xpression); EXPECT_HRESULT_FAILED(ex

pression);

expression is a

failure HRESULT

例如:

CComPtr shell;

ASSERT_HRESULT_SUCCEEDED(shell.CoCreateInstance(L"Shell.Application "));

CComVariant empty;

ASSERT_HRESULT_SUCCEEDED(shell->ShellExecute(CComBSTR(url), empty, em pty, empty, empty));

十一、类型检查

类型检查失败时,直接导致代码编不过,难得用处就在这?看下面的例子:

template class FooType {

public:

void Bar() { testing::StaticAssertTypeEq(); }

};

TEST(TypeAssertionTest, Demo)

{

FooType fooType;

fooType.Bar();

}

十二、总结

本篇将常用的断言都介绍了一遍,内容比较多,有些还是很有用的。要真的到写案例的时候,也行只是一两种是最常用的,现在时知道有这么多种选择,以后才方便查询。

三、事件机制

一、前言

gtest提供了多种事件机制,非常方便我们在案例之前或之后做一些操作。总结一下gtest 的事件一共有3种:

1. 全局的,所有案例执行前后。

2. TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后。

3. TestCae级别的,每个TestCase前后。

二、全局事件

要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。

1. SetUp()方法在所有案例执行前执行

2. TearDown()方法在所有案例执行后执行

class FooEnvironment : public testing::Environment

{

public:

virtual void SetUp()

{

std::cout << "Foo FooEnvironment SetUP" << std::endl;

}

virtual void TearDown()

{

std::cout << "Foo FooEnvironment TearDown" << std::endl;

}

};

当然过te 个这int {

}

三、我们1.

2.

cla pr s } s } / s };

在编类的

TES {

}

TES 然,这样还不esting::Add 这样的类,然 _tmain(i testing: testing: return R TestSuit 们需要写一个SetUpTest TearDownT ss FooTes otected :

tatic voi shared_r

tatic voi delete s shared_r

/ Some ex tatic T* 编写测试案的名字,代T_F(FooTe // you c T_F(FooTe 不够,我们还需dGlobalTest 然后将他们的nt argc, :AddGloba :InitGoog RUN_ALL_TE te 事件

个类,继承te Case() 方TestCase()t : publi d SetUpTe resource_ d TearDow hared_res resource_ xpensive r shared_re 案例时,我们代表一个Tes est, Test1can refer est, Test2需要告诉gt tEnvironme 的事件都挂上去_TCHAR* a alTestEnvi gleTest(&a ESTS(); esting::Test 方法在第一个 方法在最c testing estCase()= new ;wnTestCase ource_; = NULL; resource s esource_;们需要使用stSuite。) to shared )

test 添加这个ent 方法将事去。 argv[]) ironment(n argc, argv ,然后实现两个TestCase 最后一个Tes g::Test {{

e() { shared by TEST_F 这d_resource 个全局事件,事件挂进来,new FooEnv v); 两个静态方法e 之前执行stCase 之后all tests 这个宏,第一e here ,我们需要在也就是说,vironment)法

行 后执行 s. 一个参数必在main 函数我们可以写很; 必须是我们上数中通很多上面

{

}

四、Test 是S 1. S 2. T cla {

pro

};

TES {

}

TES {

}

五、 // you c TestCase tCase 事件是SetUp 方法和etUp()方法在TearDown()方ss FooCal tected :

virtual {

m_fo }

virtual {

m_fo } FooCalc T_F(FooCa EXPECT_E T_F(FooCa EXPECT_E 总结

can refer e 事件

是挂在每个案和TearDow 在每个Test 方法在每个cTest:pub void SetU oo.Init();void Tear oo.Finaliz m_foo; alcTest, H EQ(4, m_fo alcTest, H EQ(5, m_fo to shared 案例执行前后n 方法: Case 之前执TestCase 之blic testi Up() rDown() e(); HandleNone oo.Calc(12HandleNone oo.Calc(12d_resource 后的,实现方执行 之后执行 ing::Test eZeroInput 2, 16)); eZeroInput 2, 16)); e here 方式和上面的t) t_Error) 的几乎一样,不过需要实现的

GTest使用手册

玩转Google开源C++单元测试框架Google Test系列(gtest)(总) 前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错。我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好的解决了。 其实gtest本身的实现并不复杂,我们完全可以模仿gtest,不断的完善我们的测试框架,但最后我们还是决定使用gtest取代掉原来的自己的测试框架,原因是: 1.不断完善我们的测试框架之后就会发觉相当于把gtest重新做了一遍,虽然轮子造的很爽,但是不是必要的。 2.使用gtest可以免去维护测试框架的麻烦,让我们有更多精力投入到案例设计上。 3.gtest提高了非常完善的功能,并且简单易用,极大的提高了编写测试案例的效率。 如果想对gtest内部探个究竟,就把它的代码下载下来研究吧,这就是开源的好处,哈! 官方已经有如此完备的文档了,为什么我还要写呢?一方面是自己记记笔记,好记性不如烂笔头,以后自己想查查一些用法也可以直接在这里查到,一方面是对于不想去看一大堆英文文档的朋友,在我这里可以快速的找到gtest相关的内容。

一、初识gtest 1、前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。 2、下载 如果不记得网址,直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0 3、编译 下载解压后,里面有个msvc目录: 使用VS的同学可以直接打开msvc里面的工程文件,如果你在使用的是VS2005或是VS2008,打开后会提示你升级,升完级后,我们直接编译里面的“gtest”工程,可以直接编过的。 这里要提醒一下的是,如果你升级为VS2008的工程,那么你的测试Demo最好也是VS2008

如何采用离线的 google map api 加载离线谷歌地图的方法

如何采用离线的 Google Map API 加载离线谷歌地图的方法注:文档中所提到的“GoogleMapAPIV3.rar”附件,请到水经注软件论坛下载。 一、下载示例数据 这里以《水经注万能地图下载器》为你说明如何下载谷歌卫星地图。 安装万能地图下载器以后,软件启动时会显示选择在线地图的对话框,请选择“卫星.谷歌”即会显示在线的谷歌卫星地图窗口,如下图所示。 由于只是为了作演示说明如何用 Google Map 离线 API 加载谷歌地图的方法,这里我们只需要框选中国范围,即点击工具栏上的“框选下载区域”,然后在视图中绘制选择范围,如下图所示。

下载即可,如下图所示。

点击“确定”按钮,开始下载卫星地图数据。 下载完成后导出瓦片数据,选择导出类型为“瓦片:Google Map”,保存路为“D:\Test”目录,如下图所示。

在对话框中点击“输出”按钮导出Google Map瓦片,如下图所示。 二、地图引擎部署 第一步:将附件中的“GoogleMapAPIV3.rar”下载后解压到“D:\Test”目录。 第二步:将“D:\Test”目录中的“中国_GoogleMapTiles”重命名为“data”,如下图

所示。 第三步:在浏览器中打开“D:\Test\GoogleMapAPIV3\Example_GoogleMapAPI.html”,如果操作无误,将会显示离线的卫星地图,如下图所示。

以上,即是如何用 Google Map 离线 API加载谷歌地图的方法,你可以根据实际需求对“D:\Test\GoogleMapAPIV3\Example_GoogleMapAPI.html”文件进行进一步开发。 注:文档中所提到的“GoogleMapAPIV3.rar”附件,请到水经注软件论坛下载。

谷歌自动驾驶测试报告(2015年12月)

Google Self-Driving Car Testing Report on Disengagements of Autonomous Mode December 2015

Introduction In accordance with regulations issued by the the California Department of Motor Vehicles (DMV), Google Auto LLC (“Google”) submits this report of disengagements from autonomous mode that have occurred when operating its self-driving cars (SDCs) on public roads in California. In accordance with the DMV rule , this report covers the period from the date of issuance of Google’s 1 Manufacturer’s Testing Permit (September 24, 2014) through November 30, 2015. As of the end of November, Google had operated its self-driving cars in autonomous mode for more than 1.3 million miles. Of those miles, 424,331 occurred on public roads in California during the period covered by this report -- with the vast majority on surface streets in the typical suburban city environment of Mountain View, CA and neighboring communities. ?We’re self-driving 30,000-40,000 miles or more per month, which is equal to two to four years of typical US adult driving. The setting in which our SDCs and our drivers operate most frequently is important. ?M astering autonomous driving on city streets -- rather than freeways, interstates or highways -- requires us to navigate complex road environments such as ?m ulti-lane intersections?or unprotected left-hand turns, a larger variety of road users including cyclists and pedestrians, and more unpredictable behavior from other road users. This differs from the driving undertaken by an average American driver who will spend a larger proportion of their driving miles on less complex roads such as freeways. ?N ot surprisingly, 89 percent of our reportable disengagements have occurred in this complex street environment (see Table 6 below). Disengagements are a critical part of the testing process that allows our engineers to expand the software’s capabilities and identify areas of improvement. Our objective is not to minimize disengagements; rather, it is to gather, while operating safely, as much data as possible to enable us to improve our self-driving system. Therefore, we set disengagement thresholds conservatively, and each is carefully recorded. We have an evaluation process in which we identify disengagements that may signal any safety issues, and we resolve them by refining our software, firmware, or hardware and incorporating those changes across our entire fleet. As we continue to develop our technology, the rate of safety significant disengagements has fallen even as we drive more autonomous miles on public roads. Disengagements Covered by This Report The DMV rule defines disengagements as deactivations of the autonomous mode in two situations: (1) “when a failure of the autonomous technology is detected,” or (2) “when the safe operation of the vehicle requires that the autonomous vehicle test driver disengage the autonomous mode and take immediate manual control of the vehicle.” In adopting this definition, the DMV noted: 1 ?S ection 227.46 of Article 3.7 (Autonomous Vehicles) of Title 13, Division 1, Chapter 1, California Code of Regulations

玩转Google开源C++单元测试框架Google Test

玩转Google开源C++单元测试框架 Google Test 作者:CoderZh(CoderZh的技术博客 - 博客园) 出处:https://www.sodocs.net/doc/3d10796995.html,/

目录 二、断言 (9) 三、事件机制 (18) 四、参数化 (22) 五、死亡测试 (29) 六、运行参数 (35) 七、深入解析gtest (41) 八、打造自己的单元测试框架 (57)

一、一、本篇工程二、如果从下http http http 三、 下载、初识gt 前言 篇将介绍一些程,以及编写下载 果不记得网址下列地址可以p://googlet p://googlet p://googlet 编译 载解压后, 里test 些gtest 的基写一个最简单址, 直接在go 以下载到该最test.google test.google test.google 里面有个 ms 本使用,包括单的测试案例oogle 里搜g 最新版本: https://www.sodocs.net/doc/3d10796995.html,/f https://www.sodocs.net/doc/3d10796995.html,/f https://www.sodocs.net/doc/3d10796995.html,/f svc 目录: 括下载,安装。 gtest,第一个files/gtest-files/gtest-files/gtest-装,编译,建个就是。目前1.3.0.zip 1.3.0.tar.gz 1.3.0.tar.bz 建立我们第一前gtest 的最新 2 一个测试De 新版本为1.3mo 3.0,

使用VS2编过这里VS2时我误解版本编译gtes 四、下面我们结如1.设 2.设用VS 的同学可2008,打开后过的。 里要提醒一下2008工程,我升级为了V 解了,并不是本,最好保证译之后,在m st.lib 文件。第一个D 面我们开始建们在VS2008如下: 设置gtest 头文设置 gtest.lib 可以直接打开后会提示你升下的是,如果不然你会发现VS2008工程是说只能在V 证gtest 和你msvc 里面的 Demo 建立我们的第8中,新建一文件路径 b 路径 开msvc 里面升级,升完级果你升级为VS 现很郁闷,你程,结果我使S2008中编的测试工程都Debug 或是第一个Demo 一个 Win32 C 面的工程文件级后,我们直S2008的工程你的Demo 使用VS2005编译,在VS2都使用VS20是Release 目o 了,假如之前 Console Ap 件, 如果你在直接编译里面程,那么你的怎么也编不工程建Dem 005中同样可005工程。)目录里看到编前使用的VS pplication。在使用的是面的“gtest”的测试Dem 过,我也曾折mo,死活编不可以。如果要 编译出来的g S2008编译的 接着就是设置VS2005或是工程,可以mo 最好也是折腾了好久不过。(这里要编译VS20gtestd.lib 或的gtest,那 置工程属性是以直接,当里有人005或是那么,,总

googletest

google开源测试框架的使用(googletest)googletest和CppUnit有点类似,功能和作用在文档(它是一篇googletest官方文档的中译版)上面有很详细的描述,本文写了两个实例,它能概括googletest的基本使用。googletest的框架可以从上下载到,本文用的是1.0.1版本的。内容难免有不足和错误,请大家多多指教! 1.googletest的框架的组成 解压完googletest1.0.1,目录如下: include: 头文件 msvc和samples是一些例子 src就是googletest的源文件 2.第一个例子 在举例之间,我们先了解一些常用的断言: ASSERT_*版本的断言失败时会产生致命失败,并结束当前函数。EXPECT_*版本的断言产生非致命失败,而不会中止当前函数。通常更

推荐使用EXPECT_*断言,因为它们运行一个测试中可以有不止一个的错误被报告出来。但如果在编写断言如果失败,就没有必要继续往下执行的测试时,你应该使用ASSERT_*断言。 … 】 .

注意断言名称中出现的“CASE”意味着大小写被忽略了。 例子: (1)我们先新建一个空的Win32控制台应用程序gtest,把googletest中的include下的头文件都加到gtest的头文件中,把src下的实现文件都加到gtest的实现文件中。然后把项目的“配置属性”->“配置类型”改为“静态库(.lib)”。然后我们在同一个工作区内添加一个Win32控制台应用程序SimpleTest,把gtest设为依赖项目。并添加被测文件的头文件和实现文件,代码如下 头文件:

Google test使用

Google C++ Testing Framework Primer 翻译:Ray Li (ray.leex@https://www.sodocs.net/doc/3d10796995.html,) 修改日期:2008年7月6日 原文参见:https://www.sodocs.net/doc/3d10796995.html,/p/googletest/wiki/GoogleTestPrimer Introduction:为什么需要Google C++ 测试框架? Google C++ 测试框架帮助你更好地编写C++测试。 无论你是在Linux,Windows,还是Mac环境下工作,只要你编写C++代码,Google 测试框架都可以帮上忙。 那么,哪些因素才能构成一个好的测试?以及,Google C++ 测试框架怎样满足这些因素?我们相信: 1.测试应该是独立、可重复的。因为其他测试成功或失败而导致我们要对自 己的测试进行debug是非常痛苦的。Google C++ 测试框架通过将每个测 试在不同的对象中运行,使得测试分离开来。当一个测试失败时,Google C++ 测试框架允许你独立运行它以进行快速除错。 2.测试应该能够被很好地组织,并反映被测代码的结构。Google C++ 测试 框架将测试组织成测试案例,案例中的测试可以共享数据和程序分支。这样一种通用模式能够很容易辨识,使得我们的测试容易维护。当开发人员在项目之间转换,开始在一个新的代码基上开始工作时,这种一致性格外有用。 3.测试应该是可移植、可重用的。开源社区有很多平台独立的代码,它们的 测试也应该是平台独立的。除开一些特殊情况,Google C++ 测试框架运 行在不同的操作系统上、与不同的编译器(gcc、icc、MSVC)搭配,Google C++ 测试框架的测试很容易与不同的配置一起工作。 4.当测试失败时,应该提供尽可能多的、关于问题的信息。Google C++ 测 试框架在第一个测试失败时不会停下来。相反,它只是将当前测试停止,然后继续接下来的测试。你也可以设置对一些非致命的错误进行报告,并接着进行当前的测试。这样,你就可以在一次“运行-编辑-编译”循环中检查到并修复多个bug。 5.测试框架应该能将测试编写人员从一些环境维护的工作中解放出来,使他 们能够集中精力于测试的内容。Google C++ 测试框架自动记录下所有定 义好的测试,不需要用户通过列举来指明哪些测试需要运行。 6.测试应该快速。使用Google C++ 测试框架,你可以重用多个测试的共享 资源,一次性完成设置/解除设置,而不用使一个测试去依赖另一测试。 因为Google C++ 测试框架基于著名的xUnit架构,如果你之前使用过JUnit或PyUnit的话,你将会感觉非常熟悉。如果你没有接触过这些测试框架,它也只会占用你大约10分钟的时间来学习基本概念和上手。所以,让我们开始吧! Note:本文偶尔会用“Google Test”来代指“Google C++ 测试框架”。

实验一66

电子科技大学 实验报告 学生姓名:刘柳学号:201022060607 指导教师:李林实验地点:A1-413 实验时间:13周一、实验室名称: Linux环境高级编程实验室 二、实验项目名称: Linux编程环境搭建与使用 三、实验学时: 4学时 四、实验目的: 基本环境的配置使用。 五、实验内容: 本次实验包括:VMWare配置、APT使用、vi高级使用、make 的使用、gdb使用、googletest使用、valgrind使用。请用自己的话描述上述实验内容。 六、实验步骤: 1.VMWare网络配置 通过截图与文字,说明如何进行网络配置。需要囊括主要的操作步骤。注意:将主机名修改为你的姓名拼音,以杜绝抄袭。

第一步:确认当前网卡名称:键入dmesg|grep eth,可知是eth2 第二步:修改连接方式:nat,参看虚拟机ip,可知是192.168.198.2 第三步:修改/etc/network/interfaces文件

第四步:在/etc/resolv.conf中添加DNS 第五步:重新启动网络服务:/etc/init.d/networking restart 第六步:查看ip信息:Ifconfig 第七步:确认网络联通情况:ping https://www.sodocs.net/doc/3d10796995.html, 2.APT的使用 查找是否安装了g++,安装OpenSSH、lrzsz、build-essential。通过截图和文字,加以说明。 分别键入apt-get install openssh-server,apt-get install lrzsz, Apt-get install build-essential安装对应的包。安装情况见下图:

Autotest

Autotest要点 1. 概要 Autotest是Google、Redhat、IBM公司联合开发的分布式自动化测试框架,兼顾软硬件测试。Autotest基于Python,目前该项目处于活跃的开发中,代码规模已达10万行。https://www.sodocs.net/doc/3d10796995.html, 和Google内部都已部署了基于Autotest的测试架构,其中后者2009年时已包含500余台服务器,用于操作系统内核冒烟测试、服务器硬件验证等。 使用Autotest有两个前提:被测机上需安装Python;测试发起机器与被测机间要建立无密码SSH信任关系。由于Python极佳的跨平台特性及SSH的通用化,这两个前提都很容易被满足。 2. 架构 3. 组件 Autotest框架中的各组件都相对独立,之间仅有非常松的耦合关系。

3.1.被测机器(Client) 被测机除了安装Python和设置SSH信任关系外无需预装任何测试程序。 3.2.测试服务进程(Autoserv) 每一个测试任务对应一个Autoserv进程,这一进程负责通过SSH在被测机上安装autotest、编译、安装测试脚本,回收测试结果、处理测试结果等工作。 3.3.测试任务管理(Scheduler) 监控用户向前端Mysql数据库中提交的测试任务,并负责测试任务的调度。Scheduler是Autotest中担负的任务较为杂度的部分,也是分布式部署的关键。 由于每个测试任务对应一个Autoserv进程,因此一台机器上执行很多测试任务时,该机器就很容易成为瓶颈,可引入多台远程的Drone服务器,由Scheduler发起请求,在每台Drone 服务器上执行数量适当的Autoserv进程。 此外,为了在收集测试结果时避免出现I/O瓶颈,还可设置远程服务器(Result Host)统一存储结果,也是由Scheduler负责控制。 3.4.用户交互前端(Frontend) 3.4.1. W eb(AFE) 基于Web的用户交互界面,放于frontend/afe目录下。采用了GWT(Google Web Toolkit)进行开发,即使用Java编写界面源码,然后编译为可在浏览器运行的Javascript客户端,每次修改界面的Java源码,需重新编译客户端。AFE是通过JSON-RPC与服务器端交互。 3.4.2. 命令行(CLI) 基于命令行的用户交互界面。主要为cli/atest命令。该命令有丰富的参数以完成与AFE类似的功能,具体参考相关文档。CLI也是通过JSON-RPC与服务器端交互。 3.4.3. 前端Django RPC服务器 主要基于Apache的mod_python及Django RPC Server响应AFE和CLI发出的Json-RPC请求,读写前端Mysql数据库。

使用SELENIUM进行复杂的WEB自动化测试

使用分层的Selenium框架进行复杂Web应用的自动测试 软件工程师,IBM 王晨,是IBM中国系统与科技研发中心的软件工程师。从事IBM Systems Director开发测试工作。对自动测试、Web2.0和Open Source等相关领域感兴趣。 简介:在复杂Web应用程序的自动测试中,会产生大量冗余的测试脚本,同时,由于测试场景复杂多变,测试用例的灵活管理与调用是不可回避的需求。在本文中,作者通过将开源Web自动测试框架Selenium从逻辑上进行了分层,从而提高了测试脚本的复用性与可维护性。通过本文的实例讲解,您将了解该项技巧的原理与关键实现。 发布日期:2010年2月22日 级别:中级 Selenium概述 Selenium是一种Web应用的自动测试工具,通过模拟用户对Web页面的各种操作,可以精确重现软件测试人员编写的Test Cases步骤。Selenium包含三个工具:Selenium-IDE,Selenium-RC以及Selenium-Core。其中,Selenium-Core是驱动Selenium工作的核心部分,作为一个用JavaScript编写的测试引擎,它可以操作Web页面上的各种元素,诸如:点击按钮、输入文本框,以及断言Web页面上存在某些文本与Web元素等。 Selenium-IDE是一个Firefox插件,能够录制回放用户在Firefox中的行为,并把所记录的Selenese(Selenium Commands)转化为 Java/C#/Python/Ruby等语言,在Selenium-RC中修改复用。对于较为复杂的Test Cases,Selenium-IDE的功能有限,往往用它录制大致的步骤,再转化为测试人员熟悉的编程语言,在此基础上完善,形成更为强大且灵活的Selenium-RC Test Cases。 Selenium-RC(Selenium Remote Control)在Web浏览器与需要测试的Web 应用间架设代理服务器(Selenium Server),使得JavaScript引擎与被测Web应用同源,绕开同源策略的限制(Same Origin Policy),进而取得对Web页面进行各种操作的权限。 开发环境配置

R语言时间序列作业

2016年第二学期时间序列分析及应用R 语言课后作业 第三章 趋势 3.4(a) data(hours);plot(hours,ylab='Monthly Hours',type='o') 画出时间序列图 Time M o n t h l y H o u r s 19831984198519861987 39.039.540.040.541.041. 5 (b) data(hours);plot(hours,ylab='Monthly Hours',type='l') Time M o n t h l y H o u r s 19831984198519861987 39.039.540.040.541.041. 5 type='o' 表示每个数据点都叠加在曲线上;type='b' 表示在曲线上叠加数据点,但是该数据点附近是断开的;type='l' 表示只显示各数据点之间的连接线段;type='p' 只想显示数据点。 points(y=hours,x=time(hours),pch=as.vector(season(hours))) Time M o n t h l y H o u r s 19831984 198519861987 39.039.5 40.0 40.5 41.041.5 J A S O N D J F M A M J J A S O N D J F M A M J J A S O N D J F M A M J J A S O N D J F M A M J J A S O N D J F M A M J 3.10(a) data(hours);hours.lm=lm(hours~time(hours)+I(time(hours)^2));summary(hours.lm)

开源C++单元测试框架Google Test介绍

开源C++单元测试框架Google Test介绍Google Test Google test是针对c/c++的开源测试项目。采用的协议是BSD license,有很多著名的开源项目采用了它,包括Chromium(谷歌浏览器开发版)。 安装配置 下载主页: https://www.sodocs.net/doc/3d10796995.html,/p/googletest/ 官方资料文档: https://www.sodocs.net/doc/3d10796995.html,/p/googletest/wiki/GoogleTestPrimer https://www.sodocs.net/doc/3d10796995.html,/p/googletest/wiki/GoogleTestAdvancedGuide 当前的最新版本是1.5。包含3种tar.bz2,tar.gz和zip格式。解压后的目录结构: 其中的msvc就是VS的工程目录,可以直接打开进行编译(vs2008则需要进行工程升级转化),生成相应的lib静态库文件。在vs中需要在工程中设置3个地方,和ACE的设置一样:1.设置gtest的头文件

2.设置gtest的lib文件 注:如果测试代码需要上库,附加依赖项建议不要带绝对路径。

3.设置运行时的多线程库支持 如果是Release版本,Runtime Library设为/MT。当然,其实你也可以选择动态链接(/MD),前提是你之前编译的gtest也使用了同样是/MD选项。 如果是在Linux下,就比较方便,和普通的开源软件一样,采用 1../configure –prefix=/your install path (如果不带参数默认为/usr/local下面) 2.make 3.make install 然后就可以在工程中进行使用(如果指定了安装目录,则需要-I和-L来指明,同时也在最后的link加上-lpthread –lgtest) 下面是一个简易的写法: By the way: 我在192.168.100.119上采用的是默认安装,所以直接加上-lgtest和-lpthread就可以了 简单例子 如果需要使用gtest,则需要包含 #include"gtest/gtest.h" 下面是一个简单例子:

google test初步分析

google test初步分析 现在常用的C++单元测试框架有CppUnit,CxxTest,boost::test和google test。不像java/C#的测试框架,由于C++不支持reflection,所以,必须要做一些额外的工作,让框架知道相关内容的存在。CppUnit 的做法是用宏进行注册。这种做法要求我们每添加一个测试,就要考虑用相应的宏进行注册,这种做法很繁琐,最大的问题在于由于疏忽而遗漏,这种靠人工保证的东西不可靠。在这点上,CxxTest做得要好一些,有一个专门的脚本做这件事。通过这个脚本扫描这个自己编写的文件,生成一些新的文件,完成这个工作。从代码的表现力和可靠度来说,要好得多。唯一的问题是引入了一个脚本,而且这个脚本一般是由某些动态语言写成的(目前的CxxTest有Perl和Python的脚本),从而引入了对这种语言的依赖。而boost::test和google test 则是通过一些宏机制,来实现用户只需写一次就可以自动完成注册。 我大概分析了一下gtest的实现机制。由于里面用了很多宏,比较费解,因此首先用cl /P /C命令将之展开,我的测试程序如下 #include TEST(FactorialTest, Negative) { EXPECT_EQ(1, 1); } 宏展开完后主要部分如下

class FactorialTest_Negative_Test : public ::testing::Test { public: FactorialTest_Negative_Test() {} private: virtual void TestBody(); static ::testing::TestInfo* const test_info_; FactorialTest_Negative_Test(const FactorialTest_Negativ e_Test &); void operator=(const FactorialTest_Negative_Test &); }; //init test_info_ ::testing::TestInfo* const FactorialTest_Negative_Test ::te st_info_ = ::testing::internal::MakeAndRegisterTestInfo( "F actorialTest", "Negative", "", "", (::testing::internal::GetTest TypeId()), ::testing::Test::SetUpTestCase, ::testing::Test:: TearDownTestCase, new ::testing::internal::TestFactoryImp l< FactorialTest_Negative_Test>); void FactorialTest_Negative_Test::TestBody() { // This test is named "Negative", and belongs to the "Fact orialTest"

Google test 高级使用指南

Google Test 框架高级使用指南(一) 现在您已经读完 GoogleTestPrimer 并学会了如何用 Google Test 写一些测试程序, 现在是学习更多技巧的时候了。这篇文章将告诉你更多的断言、如何用流传递复杂的错误信息、传达致命失败、重用并加快你的测试夹具以及在你的测试工程中使用各种的标记。 现在您已经读完GoogleTestPrimer并学会了如何用Google Test 写一些测试程序, 现在是学习更多技巧的时候了。这篇文章将告诉你更多的断言、如何用流传递复杂的错误信息、传达致命失败、重用并加快你的测试夹具以及在你的测试工程中使用各种的标记。 更多断言 本节包括一些不太常用的,但仍然很有意义的断言。 明确声明成功或失败 这三个断言并不具体测试某个值或表达式,而是直接产生成功或失败。象其它用于测试的断言宏一样,你也可以为它们自定义失败信息。 产生一个成功断言,注意,这并不表示整个测试成功。一次测试成功的充分必要条件是:在整个测试期间没有出现失败的断言。 注:SUCCEED()宏目前不会产生任何输出,实际上它只是被定义而已。不过,以后我们可能会为它加上自定义输出功能。 FAIL*生成一个致命失败,而ADD_FAILURE*则产生一个非致命失败。相对于布尔表达式,它们在控制流程时会更有用。例如,你可以象这样写: 1.switch(expression) { 2. case 1: ... some checks ...

3. case 2: ... some other checks 4. ... 5. default: FAIL() << "We shouldn't get here."; 6.} 适用于: Linux, Windows, Mac. 异常断言 以下断言用于测试一片代码是否会抛出指定类型的异常: 例如: 1.ASSERT_THROW(Foo(5), bar_exception); 2. 3.EXPECT_NO_THROW({ 4. int n = 5; 5. Bar(&n); 6.});

2021年测试工程师笔试题目

测试工程师笔试题目 1.extern "C"{}的含义是什么,能解决什么问题? 2.写出至少两种经典的设计模式,阐明其使用场景,有伪代码更好。 3.TCP连接中time_wait状态是什么意思?说明其使用的场景,并指出它的好处和坏处分别是什么? 1.有个任务定时器,每天要定时执行N个任务(N < 1000),其中有些任务的执行依赖于其他任务的执行,如A任务执行之后B任务才能执行,但这些任务之间不存在循环依赖。请用算法来说明任务的执行顺序,有伪代码更好。 2.编程求某一个英文文本中完整句子的数目,文本中只包含大小写字母、空格、“,”和“.”,完整的句子是指以“.”结束,且“.”号前必须出现至少一个字母。 第三题:系统设计题 设计一个系统,该系统记录用户的访问记录。每条记录包含访问的'url、访问ip以及访问时间,系统每天至少要记录1000亿条记

录,系统要对这些数据进行存储和维护,并提供实时的查询,至少满足下面两个查询: 1.给定任意一个时间段(精确到分)和URL,计算该时间段内访问这个url的访问量; 2.给定任意一个时间段(精确到分)和IP,计算该时间段内访问这个IP的访问量。 第四题.做test plan 要涵括哪些内容? 第五题.请列出设计测试用例的方法和各自的侧重点 第六题.白盒测试和黑盒测试是什么?什么是regression testing and ad hoc testing? Part II: Please answer following coding relevant questions. 第七题.请用java语言实现以下需求: 1.算[1-N]之间能被2整除的数字个数

2018-文思海辉软件测试工程师笔试题word版本 (2页)

2018-文思海辉软件测试工程师笔试题word版本 本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == 文思海辉软件测试工程师笔试题 Part I: Please answer following testing relevant questions. 1.做test plan 要涵括哪些内容? 2.请列出设计测试用例的方法和各自的侧重点 3.白盒测试和黑盒测试是什么?什么是regression testing and ad hoc testing? Part II: Please answer following coding relevant questions. 1.请用java语言实现以下需求: 计算[1-N]之间能被2整除的数字个数 2.请用Junit写test case 测试题目4的实现 3.(单选题)int x=1,y=1,z=6,y+=z–/++x的结果是(B) A 3 B 4 C 5 D 3.5 4.将int数组,如int data[7]={50,49,61,32,35,79,20}冒泡排序,写出排序算法,并且写出算法的时间复杂度,可以使用任意编程语言,不得使用自然语言 Part III: Please answer in English for questions below. 1.What ‘s the difference of severity and priority When you reporting a defect? 2.How to make sure high test coverage? 3.How to test Google home page? Please list test points Please use following link to test /querytest =

GTest使用说明材料

玩转Google开源C++单元测试框架Google Test系列(gtest)(总)前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错。我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好的解决了。 其实gtest本身的实现并不复杂,我们完全可以模仿gtest,不断的完善我们的测试框架,但最后我们还是决定使用gtest取代掉原来的自己的测试框架,原因是: 1.不断完善我们的测试框架之后就会发觉相当于把gtest重新做了一遍,虽然轮子造的很爽,但是不是必要的。 2.使用gtest可以免去维护测试框架的麻烦,让我们有更多精力投入到案例设计上。 3.gtest提高了非常完善的功能,并且简单易用,极大的提高了编写测试案例的效率。 如果想对gtest内部探个究竟,就把它的代码下载下来研究吧,这就是开源的好处,哈!官方已经有如此完备的文档了,为什么我还要写呢?一方面是自己记记笔记,好记性不如烂笔头,以后自己想查查一些用法也可以直接在这里查到,一方面是对于不想去看一大堆英文文档的朋友,在我这里可以快速的找到gtest相关的内容。

一、初识gtest 1、前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo 工程,以及编写一个最简单的测试案例。 2、下载 如果不记得网址,直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0 3、编译 下载解压后,里面有个msvc目录: 使用VS的同学可以直接打开msvc里面的工程文件,如果你在使用的是VS2005或是VS2008,打开后会提示你升级,升完级后,我们直接编译里面的“gtest”工程,可以直接

iQuickTest培训课程 - 白盒测试框架(Gtest C )

https://www.sodocs.net/doc/3d10796995.html,

课程目标 掌握Google Testing Framework 理解白盒测试框架的主要功能及使用 掌握如何集成及实际应用框架于项目中 本课程每节均有样例代码,在GtestSample2中可以看到

什么是白盒测试框架 具备测试用例及测试集的定义管理功能,并方便的提供运行手段 具备完备的断言系统 具备监控被测程序状态的能力 支持测试中需要的一些高级特性 白盒测试框架就是一套完整、实现良好、稳定的测试功能库的集合。 的集合

如何集成Gtest Framework 1.下载并编译框架 2.在Visual Studio中设置Gtest库路径及静态库路径2在Vi l St di中设置Gt t库路径及静态库路径 3.设置运行库属性(保持与Gtest编译设置一致) 在测试工程里包含h 4.在测试工程里包含gtest.h 5.定义测试集并编写测试用例 6.编译测试工程并运行测试 参考样例代码GTestSam1

Gtest的断言系统 Gtest的断言主要分为以下2类 Assert_* 指必须符合的断言,失败则该测试失败 A t*指必须符合的断言失败则该测试失败 Expect_* 指期望符合的断言,失败则输出失败信息,但是该测试继续进行 Gtest的断言后可以跟随失败信息 ASSERT_EQ(mySize, clothingSize) << “The clothing should be error,clothing size should be” << mySize; h ld b l thi i h ld b”<

gtest参数化测试代码示例

gtest参数化测试代码示例 在玩转Google开源C++单元测试框架Google Test系列(gtest)之四- 参数化中已经介绍过了如何使用gtest进行参数化测试。在twitter上应@xlinker 的要求,我在这里提供一个参数化的完整例子。这个例子也是我当初了解gtest时写的,同时这个例子也在《玩转》系列中出现过。最后,我再附上整个demo工程,里面有一些其他的示例,刚开始上手的同学可以直接拿我的demo工程去试,有任何疑问都欢迎提出。以下是使用TEST_P宏进行参数化测试的示例: #include "stdafx.h" #include "foo.h" #include class IsPrimeParamTest : public::testing::TestWithParam { }; // 不使用参数化测试,就需要像这样写五次 TEST(IsPrimeTest, HandleTrueReturn) { EXPECT_TRUE(IsPrime(3)); EXPECT_TRUE(IsPrime(5)); EXPECT_TRUE(IsPrime(11)); EXPECT_TRUE(IsPrime(23)); EXPECT_TRUE(IsPrime(17)); } // 使用参数化测试,只需要: TEST_P(IsPrimeParamTest, HandleTrueReturn) { int n = GetParam(); EXPECT_TRUE(IsPrime(n)); } // 定义参数 INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5, 11, 23, 17)); // ----------------------- // 更复杂一点的参数结构 struct NumberPair { NumberPair(int _a, int _b)

相关主题