zoukankan      html  css  js  c++  java
  • googletest--Test Fixture

    前面博客中我们在单元测试之前会做一些变量初始化等工作,而同一个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(); }
  • 相关阅读:
    在eclipse中如何在大量项目中查找指定文件
    字体图标使用笔记
    微信扫码显示特效
    Flex 布局教程:实例篇
    Flex 布局教程:语法篇
    12月份前端资源分享
    什么样的技术能活下来?该如何筛选繁复的框架和工具
    web前端知识在乱花渐欲迷人眼的当下,如何分清主次和学习优先级呢?
    2015前端生态发展回顾(转)
    HDU1507 Uncle Tom's Inherited Land*
  • 原文地址:https://www.cnblogs.com/logchen/p/10259958.html
Copyright © 2011-2022 走看看