googletest--Test Fixture
Posted logchen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(); }
以上是关于googletest--Test Fixture的主要内容,如果未能解决你的问题,请参考以下文章
Python Pytest自动化测试 fixture与fixture互相调用
pytest文档23-使用多个fixture和fixture直接互相调用