Google C++ Test Framework (二)为用例中的测试进行统一的配置

gtest提供了一种机制,可以为同一用例中的全部测试设定一个相同的初始环境,并且在完成每一测试后进行后处理。可以继承testing::Test类,将类名指定为用例的名字,并在子类中实现两个虚函数SetUp和TearDown(其中SetUp用于初始化,而TearDown则用于释放空间之类的收尾操作),然后可以用TEST_F宏代替TEST宏进行测试。

示例如下:
#include <gtest/gtest.h>
#include <string>
#include <iostream>

class Say{
public:
    std::string prefix;

    std::string SayAWord(std::string word){
        return prefix + word;
    }
};

class TEST_STRING : public testing::Test{
protected:
    Say _s;    
    virtual void SetUp() {
        std::cout<<"In SetUp()"<<std::endl;
        _s.prefix = "Say ";
    }

    virtual void TearDown() {
        std::cout<<"In TearDown()"<<std::endl;
    }
};

TEST_F(TEST_STRING, BLANK){
    EXPECT_STREQ("Say ",_s.SayAWord("").c_str());
}


TEST_F(TEST_STRING, STRING){
    EXPECT_STREQ("Say hello",_s.SayAWord("hello").c_str());
    EXPECT_STREQ("Say hello",_s.SayAWord("bye").c_str());
}

int main(int argc, char* argv[]){
    testing::InitGoogleTest(&argc,argv);
    RUN_ALL_TESTS();
    return 0;
}

在这个例子中,我们可以在TEST_STRING类中指定要测试的Say类中的prefix,那么每一个测试中,则不需要再指定prefix的内容。这个程序的运行结果如下所示:

[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from TEST_STRING
[ RUN      ] TEST_STRING.BLANK
In SetUp()
In TearDown()
[       OK ] TEST_STRING.BLANK
[ RUN      ] TEST_STRING.STRING
In SetUp()
d:/my documents/visual studio 2008/projects/try_gtest/try_gtest/try_test_f.h(38)
: error: Value of: _s.SayAWord("bye").c_str()
  Actual: "Say bye"
Expected: "Say hello"
In TearDown()
[  FAILED  ] TEST_STRING.STRING
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran.
[  PASSED  ] 1 test.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] TEST_STRING.STRING

 1 FAILED TEST

根据结果,我们可以看到每个测试开始后,首先进入SetUp,然后进行测试,最后进入TearDown,即gtest为每一个测试都创建了一个TEST_STRING类的对象。对于同一个用例,不能够把TEST_F和TEST宏混用,如果在TEST_STRING.BLANK后面加入如下的测试:
TEST(TEST_STRING, TEST_ERROR){
    EXPECT_STREQ("Say ","Say ");
}

那么会得到如下的报错信息:
[ RUN      ] TEST_STRING.TEST_ERROR
../src/gtest.cc(1962): error: Failed
All tests in the same test case must use the same test fixture
class, so mixing TEST_F and TEST in the same test case is
illegal.  In test case TEST_STRING,
test BLANK is defined using TEST_F but
test TEST_ERROR is defined using TEST.  You probably
want to change the TEST to TEST_F or move it to another test
case.
[  FAILED  ] TEST_STRING.TEST_ERROR

实际上,使用TEST宏时,相当于建立了一个SetUp和TearDown都为空的类,及相当于一个复制了一个testing::Test类,并且命名为用例的名字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

socratescli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值