我想使用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 ++ std库和stackoverflow营救: