`
java-mans
  • 浏览: 11429264 次
文章分类
社区版块
存档分类
最新评论

Google Test(GTest)和Google Mock(GMock)入门简介

 
阅读更多

Google Test


1. 自定义错误输出:

ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";

for (int i = 0; i < x.size(); ++i) {
 EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
}

2. ASSERT_* 与EXPECT_*系列的区别:

ASSERT_TRUE(condition) ASSERT_FALSE(condition) ASSERT失败导致当前case终止
EXPECT_TRUE(condition) EXPECT_FALSE(condition) EXPECT失败,打印错误,并继续执行当前case
在GTest中,二者的称呼为:Fatal assertion, Nonfatal assertion

什么时候用ASSERT,什么时候用EXPECT呢?一般性的原则是,当你希望程序出错后继续运行,以便让代码暴露出更多的潜在错误的时候,使用EXPECT。当你认为某处出错后继续运行没有意义的时候,使用ASSERT。例如,某个对象如果为NULL,后面对它的引用会导致null pointer error,那么最好还是用ASSERT_NE(NULL, obj)。




3. 比较运算符

ASSERT_*, EXPECT_*都有:

ASSERT_EQ,ASSERT_NE,ASSERT_LT,ASSERT_GT,ASSERT_LE,ASSERT_GE

EXPECT_EQ,EXPECT_NE,EXPECT_LT,EXPECT_GT,EXPECT_LE,EXPECT_GE

另外,GTEST还支持STRING的比较。相关函数有(以ASSERT为例)

ASSERT_STREQ,ASSERT_STRNE,ASSERT_STRCASEEQ,ASSERT_STRCASENE


4. TEST与TEST_F之间的区别

TEST_F比TEST强一些的地方在于TEST_F实际上会生成一个新类,该类有SetUp和TearDown函数用于建立和销毁数据结构。

同一个TestCase文件中不能混合使用TEST与TEST_F。

For each test defined withTEST_F(), Google Test will:

  1. Create afreshtest fixture at runtime
  2. Immediately initialize it viaSetUp(),
  3. Run the test
  4. Clean up by callingTearDown()
  5. Delete the test fixture. Note that different tests in the same test case have different test fixture objects, and Google Test always deletes a test fixture before it creates the next one. Google Test does not reuse the same test fixture for multiple tests. Any changes one test makes to the fixture do not affect other tests.


Google Mock

GoogleMock是个很强大的东西,测试一个模块的时候,可能涉及到和其他模块交互,可以将模块之间的接口mock起来,模拟交互过程。


1. Makefile里面需要加入 -lgmock才能正常连接

 AM_LDFLAGS=-lpthread -lc -lm -lrt -lgtest -lgmock 


2. 可以手工生成Mock类,也可以使用脚本生成

手工:


class ObProject: public ObSingleChildPhyOperator
{ 
 public:
    ObProject();
    virtual ~ObProject();
    void reset(){};


    int add_output_column(const ObSqlExpression& expr);
    virtual int open();
    virtual int close();
    virtual int get_next_row(const common::ObRow *&row);
    virtual int64_t to_string(char* buf, const int64_t buf_len) const;
        ....
 };

class MockObProject : public ObProject

{
  public:
  MOCK_METHOD0(open, int());
  MOCK_METHOD0(close, int());
  MOCK_METHOD1(add_output_column, int(const ObSqlExpression &expr));
};

脚本:

需要mockob_ms_tablet_location_proxy.h中的ObMergerLocationCacheProxy类,方法如下:

 gmock_installed_dir/scripts/generator/gmock_gen.py ob_ms_tablet_location_proxy.h ObMergerLocationCacheProxy

3. 一个类中,只有virtual的member funciton能被mock(试验得到的结论),调用被mock的member function,function行为变成mocked behavior,调用类中没有被mock的member function,function行为与原类相同,不被mock改变。

ps,写了一个简单类,不是virtual居然也能被mock,奇怪。。。。在一个复杂类中,必须是virtual的才能被mock。 这些是实验得到的结论。

从理论上分析,应该必须是virtual才可以。所以,确定哪些函数要被mock,然后在头文件中将其virtual化。不然可别说我没有预先告诉你哦;)


4. 一个被Mock的函数,如果没有在EXPECT_CALL中指定expected behavior,系统将会为其指派默认行为(什么都不做,返回0),并且在屏幕上打印WARNING:

GMOCK WARNING:
Uninteresting mock function call - returning default value.
Function call: get_next_row(@0x7fff51a6b888 0x30c51529e0)
Returns: 0
Stack trace:






分享到:
评论

相关推荐

    gtest-1.3.0

    用于做单元测试用例,可以结合gmock对函数打桩一起使用。

    gtest&gmock资料

    google test&& google mock, c++单元测试资料,网上收集的资料

    C语言 单元测试 gtest教程 ctestcode Unitest

    基于google gtest gmock的 实战教程。 演示,单元测试在C语言上 运用 简单上手,通俗易懂,提高代码质量,和编程效率

    gtest 源码gtest 源码gtest 源码gtest 源码

    google test c++测试工具 gtest 包含两部分: gmock-1.7.0 gtest-1.7.0

    googlemock库附使用教程

    很有用的C++单元测试工具,附使用教程,如何编译Google Mock和Google Test,环境搭建编写测试用例

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

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

    googletest-release-1.10.0_googlegmock/gtest_

    谷歌开源测试框架源码, gmock和gtest

    gtest(google test)

    github上面最新的googletest,附带googletestprimer中文翻译

    Google Test

    Google Test;GTest;大家都知道的测试工具

    用googlemock模拟C++对象

    mock是用来配合googletest对C++项目做单元测试的。它依赖于googletest(参见我上篇文章《如何用googletest写单元测试》:),下面我来说说linux上怎么用它来做单元测试。本文包括:1、如何获取、编译googlemock;2、...

    googletest.zip

    googletest.zip,gtest源码包,用于学习gtest框架、阅读gtest源码等等

    gmock-1.7.0(包含gtest/gmock)

    google UT框架gtest/gmock。主要是用于我那三篇UT相关的博客。 本想免费的,但是现在改版,选项里最低必须是2分,sorry了。 相关博客地址: http://blog.csdn.net/songqier/article/details/78822325 ...

    GoogleTest(gtest)

    GoogleTest 是由测试技术团队开发的测试框架,具有 考虑到 Google 的具体要求和限制。无论您从事以下工作 Linux、Windows 或 Mac,如果您编写 C++ 代码,GoogleTest 可以为您提供帮助。它 支持*任何*类型的测试,而...

    gtest gmock

    gtest gmockgtest gmockgtest gmockgtest gmockgtest gmockgtest gmockgtest gmockgtest gmockgtest gmock

    google test 源代码

    Google C++ Testing Framework: Google C++测试...# wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.gz # tar -zxvf gtest-1.5.0.tar.gz # cd gtest-1.5.0 # ./configure # make # make install

    gtest、gmock、mockcpp及使用方法.zip

    内部有源码及使用方法

    googletest测试框架

    谷歌测试框架。包含gtest和gmock。截止16年1月19号最新版

    googletest_最新gtest测试框架_

    利用谷歌gtest测试框架,搭建自己的测试用例

    gtest demo

    这是一份使用gtest的示例代码,展示了testcase,testsuite,及多参数测试用例的用法。我使用的源码是gtest-1.6.0,这下面有一个文件夹fused-src,下面的gtest中包含有gtest.h.gtest_main.cc,gtest-all.cc三个文件,这...

    googletest-release-1.6.0.zip

    googletest-release-1.6.0 gtest的官方网站是: http://code.google.com/p/googletest/ 从官方的使用文档里,你几乎可以获得你想要的所有东西 http://code.google.com/p/googletest/wiki/GoogleTestPrimer ...

Global site tag (gtag.js) - Google Analytics