gpt4 book ai didi

c++ - 我可以在 C++ 中使用 TableDrivenTests 概念吗?

转载 作者:行者123 更新时间:2023-11-28 01:44:50 26 4
gpt4 key购买 nike

我知道在 Go 中常用的是 TableDrivenTests实现测试用例,例如:

func TestMyFunc(t *testing.T) {
var tTable = []struct {
input []float64
result float64
}{
{[]float64{1, 2, 3, 4, 5, 6, 7, 8, 9}, 102.896},
{[]float64{1, 1, 1, 1, 1, 1, 1, 1, 1}, 576.0},
{[]float64{9, 9, 9, 9, 9, 9, 9, 9, 9}, 0.0},
}

for _, pair := range tTable {
result := MyFunc(pair.input)
assert.Equal(t, pair.result, result)
}
}

Given a table of test cases, the actual test simply iterates through all table entries and for each entry performs the necessary tests.

我真的很喜欢这种Go 风格来实现测试。所以我想知道,是否可以在 C++ 中使用类似的东西?如果可能的话,你能给我举个例子吗?

编辑:我正在使用 Qt Creator 并且创建了一个类来执行单元测试。我真正想知道的是,是否可以使用 inputsoutputs 创建结构并遍历条目以执行每个测试。当我使用 Qt 时,它不需要是“标准 C++ 结构”,它可以是 Qt 提供的另一种数据结构。

最佳答案

这是对 C++ 的几乎 1:1 翻译:

#include <vector>
#include <iostream>

// Testable function.
double MyFunc(const std::vector<double> &input)
{
static double results[] = { 102.896, 576.0, 0.0 };
static int i = 0;
return results[i++]; // return different results
}

// Our test. Returns true if passes.
bool TestMyFunc()
{
struct
{
std::vector<double> input;
double result;
} tTable[] =
{
{{1, 2, 3, 4, 5, 6, 7, 8, 9}, 102.896},
{{1, 1, 1, 1, 1, 1, 1, 1, 1}, 576.0},
{{9, 9, 9, 9, 9, 9, 9, 9, 9}, 0.0},
};

for ( const auto &pair : tTable ) {
auto result = MyFunc(pair.input);
if ( result != pair.result )
return false; // return false if test fails
}

return true; // all test cases passed
}

int main() {
std::cout << TestMyFunc() << std::endl;
return 0;
}

但我建议使用现有的单元测试框架,例如gtest有一个概念 value parametrised tests ,这大约是您想要的。

关于c++ - 我可以在 C++ 中使用 TableDrivenTests 概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45570321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com