在 C++ 的单元测试代码中,当我需要比较两个向量时,我会创建临时向量来存储预期值。
std::vector<int> expected({5,2,3, 15});
EXPECT_TRUE(Util::sameTwoVectors(result, expected));
我可以把它变成一条线吗?在 python 中,我可以生成一个带有“[...]”的列表。
sameTwoVectors(members, [5,2,3,15])
在 C++ 的单元测试代码中,当我需要比较两个向量时,我会创建临时向量来存储预期值。
std::vector<int> expected({5,2,3, 15});
EXPECT_TRUE(Util::sameTwoVectors(result, expected));
我可以把它变成一条线吗?在 python 中,我可以生成一个带有“[...]”的列表。
sameTwoVectors(members, [5,2,3,15])
由于std::vector
包含一个采用 a的初始化列表构造函数std::initializer_list
,只要sameTwoVectors
函数按值、右值引用或引用接受向量,您就可以使用统一的初始化语法const
。
namespace Util
{
bool sameTwoVectors(
const std::vector<int>& result,
const std::vector<int>& expected)
{
return result == expected;
}
}
int main()
{
std::vector<int> result;
EXPECT_TRUE(Util::sameTwoVectors(result, {5,2,3,15}));
}
或者,如果sameTwoVectors
只做一个简单的比较,你可以消除它。调用时只需在其位置使用比较表达式EXPECT_TRUE
。权衡是您必须std::vector<int>
显式指定而不是依赖隐式转换构造函数。它少了几个字符,并且更清楚预期的结果是什么。
EXPECT_TRUE(result == std::vector<int>({5,2,3,15}));
如果Util::sameTwoVectors
需要 const 引用或只是一个值,你可以(假设C++11支持)这样写
EXPECT_TRUE(Util::sameTwoVectors(result, std::vector<int>{5, 2, 3, 15}));