前面博客中我们在单元测试之前会做一些变量初始化等工作,而同一个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. 【CSP】字符与int

    [转自https://yq.aliyun.com/articles/19153] WIKIOI-1146 ISBN号码   光仔december 2014-03-01 16:20:00 浏览479 评 ...

  2. FZU软工第三次作业-原型设计

    目录 00.前言: 01.PSP表格: 02.需求分析--NABCD模型 N-- Need 需求 A-- Approach 做法 B-- Bnefit 好处 C-- Competitors 竞争 D- ...

  3. 为何linux(包括mac系统)执行指令要加上 ./ ??

    比如,现在要在$HIVE_HOME/bin下执行hive指令来启动hive,则该指令的执行顺序如下所示: 1 先找PATH路径 1.1 如果PATH路径下配置了$HIVE_HOME/bin,无论PAT ...

  4. java-内部类访问特点-私有成员内部类-静态成员内部类-局部内部类访问局部变量

    1.内部类访问特点: - 内部类可以直接访问外部类的成员,包括私有. - 外部类要访问内部类的成员,必须创建对象. - 外部类名.内部类名 对象名 = 外部类对象.内部类对象: - 例: class ...

  5. JSM的topic和queue的区别

    在JMS(Java消息服务)中,Topic实现publish和subscribe语义.一条消息被publish时,它将发到所有感兴趣的订阅者,所以零到多个 subscriber(电脑词汇中解释为“用户 ...

  6. (22)Ajax的基本使用(实现登录功能和局部刷新以及防止跨站请求伪造攻击)

    Ajax的作用 前后端分离的项目,需要交互,就要通过Ajax来完成交互 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即 ...

  7. (13)自定意义标签和过滤器 (templatetags)

    过滤器分内置和自定意义 PS:过滤器可以用在for循环和if判断后,但是标签不能使用在for循环和if判断后 内置过滤器: add(在模板中实现加减法) default(就是当传入的变量是False的 ...

  8. input的焦点事件

    <body> <h3>表单中文本框的focus和blur事件</h3> <input id="txtest" type="tex ...

  9. hdu2461 Rectangles 线段树--扫描线

    You are developing a software for painting rectangles on the screen. The software supports drawing s ...

  10. JOISC2019 简要题解

    第18回 日本情報オリンピック 春合宿 オンラインコンテスト (JOISC2019) 官网 Day 1 試験 (Examination) description 有\(N\)个学生,每个学生有两科成绩 ...