前面博客中我们在单元测试之前会做一些变量初始化等工作,而同一个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();
st.push();
st.push();
}
virtual void TearDown() {  //在测试结束后,析构函数之前执行
} MyStackTest() {
std::cout << "MyStackTest is constructed." << std::endl;
st.push();
}
~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(, val); EXPECT_EQ(, val) << "This value must be 56"; EXPECT_EQ(, val) << "This value cannot be different from " << val; EXPECT_EQ(, 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的更多相关文章

  1. GoogleTest初探(0)

    单元测试是一种保证代码质量的手段.程序员可以通过写单元测试来保证自己写的代码的功能正确. 本人所在公司使用GoogleTest测试框架来进行单元测试.虽然现在在公司的工程代码中写单元测试已经驾轻就熟, ...

  2. GoogleTest 之路2-Googletest 入门(Primer)

    Why googletest? 为啥要用GoogleTest呢? googletest 是由测试技术Team 开发的带有google 特殊的需求和限制的测试框架. 不管你在什么平台上写C++代码,go ...

  3. Googletest Primer

    Googletest Primer 原文地址:https://github.com/google/googletest/blob/master/googletest/docs/primer.md In ...

  4. Google C++单元测试框架GoogleTest(总)

    之前一个月都在学习googletest框架,对googletest的文档都翻译了一遍,也都发在了之前的博客里,另外其实还有一部分的文档我没有发,就是GMock的CookBook部分:https://g ...

  5. VS2015搭建GoogleTest框架--配置第一个项目

    最近公司要我学习Google的测试框架google test:https://github.com/google/googletest. GoogleTest是C++的测试框架,我一个学习Java的, ...

  6. [小北De编程手记] : Lesson 04 玩转 xUnit.Net 之 Fixture(下)

    上一篇文章<[小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)>向大家介绍了xUnit.Net 共享数据的方式.Test Case的构造函数 ...

  7. [小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)

    在使用xUnit.Net Framework构建单元测试或自动化测试项目的时候,无论是针对一些比较耗费资源的对象亦或是为了支持Test case预设数据的能力,我们都需要有一些初始化或是清理相关的动作 ...

  8. 单元测试---googletest

    单元测试概述 测试并不只是测试工程师的责任,对于开发工程师,为了保证发布给测试环节的代码具有足够好的质量( Quality ),为所编写的功能代码编写适量的单元测试是十分必要的. 单元测试( Unit ...

  9. 如何用googletest写单元测试

    http://www.uml.org.cn/c++/201203293.asp googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows.linux.Mac等OS平台 ...

随机推荐

  1. javascript的this多种场景用法

    作者:刘志祥 时间:2017.11.10 参考:阮一峰的官方网站 this 是javaScript中的一个关键字,只能在函数内使用.随着场合的不同,this的值会发生变化. 1. 单纯的全局函数调用, ...

  2. python学习1 ---range()函数

    奇怪的现象 在paython3中 print(range(10)) 得出的结果是 range(0,10) ,而不是[0,1,2,3,4,5,6,7,8,9] ,为什么呢? 官网原话: In many ...

  3. lesson3-神经序列模型I-小象

    优化目标函数: batch gradient descent:必须便利all训练数据 -->随机梯度下降,但不稳定~一个数据点就更新,快但不稳定-->minibatch,取m个随机数据点, ...

  4. SQL-数据库操作-002

    数据库的创建:create database data_name on primary ( name=data_1, filename='D\Data\data_name.mdf', size=50m ...

  5. (8)视图层参数request详解

    PS:浏览器页面请求的都是get请求 PS:post请求是通过form表单,阿贾克斯发 request里面的常用方法 def index(request): print(request.META) # ...

  6. stack 的一些用法

    #include<bits/stdc++.h> using namespace std; int32_t main() { stack<int> st; st.push(); ...

  7. Mybatis(四)

    参考网址如下: http://www.cnblogs.com/xdp-gacl/p/4264425.html 向大家推荐 博客园 孤傲苍狼 大哥的博客,东西写的有水平.小弟记录一下自己的学习历程,自勉 ...

  8. 自定义ThreadPoolExecutor带Queue缓冲队列的线程池 + JMeter模拟并发下单请求

    .原文:https://blog.csdn.net/u011677147/article/details/80271174 拓展: https://github.com/jwpttcg66/GameT ...

  9. Spring通知方法错误

    错误提示,主要最后一句话    ,花了2个小时 org.springframework.beans.factory.BeanCreationException: Error creating bean ...

  10. SQLite数据库下载

    一:SQLite简介 SQLite是一种嵌入式数据库,它的数据库就是一个文件.体积很小,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. 要操作关系数据库,首先需要连接到 ...