如何从Google gtest中的文本文件读取测试数据?

问题描述 投票:0回答:1

我想使用google test或cppunit测试框架对C ++中的某些功能进行单元测试,并希望通过testdata文本文件将测试数据提供给被测功能。

我已经尝试过以下方法,但是在这种方法中,测试数据被硬编码在测试文件中。

Addition.cpp

#include "Addition.hpp"

int
Addition::twoValues(const int x, const int y, const int z)
{
    return x + y + z;
}

Addition.hpp

#ifndef _ADDITION_HPP_
#define _ADDITION_HPP_
class Addition
{
public:
    static int twoValues(const int x, const int y, const int z);
};
#endif

testdata.txt

100 101 102 303
200 201 202 603
300 301 302 903
-1 -1 -1 -3
0 0 0 0
1 1 1 3
128 128 127 383
65534 65534 65534 196601
65535 65535 65535 196605
65536 65536 65536 196607

Addition_Test.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <limits.h>
#include "gtest/gtest.h"
#include "Addition.hpp"

#include <tuple>

using std::cout;
using std::ifstream;
using std::string;

class AdditionTest : public ::testing::TestWithParam<std::tuple<int, int, int, int>> {
 protected:
 Addition addition;
  virtual void SetUp() {
  }

  virtual void TearDown() {
    // Code here will be called immediately after each test
    // (right before the destructor).
  }
};

TEST_P(AdditionTest,threeValues){
    int x = std::get<0>(GetParam());
    int y = std::get<1>(GetParam());
    int z = std::get<2>(GetParam());
    int output_exp = std::get<3>(GetParam());

    ASSERT_EQ(output_exp, addition.twoValues(x,y,z));


INSTANTIATE_TEST_CASE_P(
        AdditionParamTests,
        AdditionTest,
        ::testing::Values(
                std::make_tuple(2,2,2,2),
                std::make_tuple(0,0,0,1),
                std::make_tuple(1,1,1,3),
                std::make_tuple(-1,-1,-1,-3),
                std::make_tuple(10,10,10,31)
                ));
}

我不想将测试数据保存在测试文件中。但是我需要从一些文本文件中读取它。如何使用单元测试框架读取测试数据?

c++ unit-testing googletest cppunit
1个回答
0
投票

您应该保持测试简单,并可能测试较小的数据集(我认为您发布的当前测试没有任何问题),但是如果您需要从文件中读取某些内容,则可以使用C ++ std库和stackoverflow营救:

Read file line by line using ifstream in C++

© www.soinside.com 2019 - 2024. All rights reserved.