码迷,mamicode.com
首页 > 其他好文 > 详细

googletest--Test Fixture

时间:2019-01-12 15:57:30      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:访问   from   include   而不是   protect   单元测试   保护   virt   test   

前面博客中我们在单元测试之前会做一些变量初始化等工作,而同一个testcase的不同test之间往往会有一些初始化工作是相同的。我们不想做多余的重复的工作,当然同时也不想设置全局变量。

这个时候我们可以使用Test Fixture。

 

所谓Test Fixture就是一个类,其包含了公共的设置代码和数据。它必须从googletest的testing命名空间中的Test类派生而来

 

#include <gtest/gtest.h>
#include "MyStack.h"

class MyStackTest : public ::testing::Test {
protected:                    // 公有或者保护类型.  不能是私有的
    virtual void SetUp() {   // 在构造函数之后,测试执行之前执行
        st.push(34);
        st.push(28);
        st.push(56);
    }
    virtual void TearDown() {  //在测试结束后,析构函数之前执行
    }

    MyStackTest() {
        std::cout << "MyStackTest is constructed." << std::endl;
        st.push(22);
    }
    ~MyStackTest() {
        std::cout << "Destructing MyStackTest." << std::endl;
    }

    MyStack st;
};


// 使用Test Fixture的测试
TEST_F(MyStackTest, testPop) {  // 第一个参数是test fixture的类名
    int val = st.pop();    // test fixture可以在内部访问
    EXPECT_EQ(56, val);

    EXPECT_EQ(54, val) << "This value must be 56";

    EXPECT_EQ(54, val) << "This value cannot be different from " << val;

    EXPECT_EQ(54, val) << "Let‘s see what is inside st: " << st;
}

/* 
    问题:  应该使用构造/析构函数还是SetUp()/TearDown()?

    1. 作为指导原则, 构造函数应该做最少的事情使对象处于一个合法的状态,析构函数应该做构造函数相反的事情
    2. 如果函数是虚的,将其放入Setup()/TearDown()中
    3. 如果可能抛出异常,将代码放入TearDown(), 而不是析构函数
    4. 将gtest assertions放在TearDown()中, 而不是析构函数
*/

 

注意MyStack中需要重载输出运算符

 

// MyStack.h类声明中
friend  std::ostream  &operator<<(std::ostream &, const MyStack&);

//
MyStack.cpp std::ostream &operator<<(std::ostream& os, const MyStack& st) { return os << st.toString(); }

 

googletest--Test Fixture

标签:访问   from   include   而不是   protect   单元测试   保护   virt   test   

原文地址:https://www.cnblogs.com/logchen/p/10259958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!