在c++中创建未命名容器,以便在单元测试中进行临时比较
Making unnamed container in c++ for temporary comparison in unit test
在c++的单元测试代码中,当我需要比较两个向量时,我创建临时向量来存储期望值。
std::vector<int> expected({5,2,3, 15});
EXPECT_TRUE(Util::sameTwoVectors(result, expected));
我能把它写成一行吗?在python中,我可以用"[…]"生成一个列表。
sameTwoVectors(members, [5,2,3,15])
由于std::vector
包含一个初始化列表构造函数,它接受一个std::initializer_list
,只要sameTwoVectors
函数接受一个vector by value,右值引用或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}));
相关文章:
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 用于交叉编译和CMake的预处理器宏的单元测试
- C++ 用于单元测试的模板模板
- 提升 1.64 单元测试编译失败
- 单元测试欧拉到四元数实现失败
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 如何最好地将C++中的两个数组与单元测试进行比较,以验证它们是否匹配
- CATCH 单元测试C++比较 std::array
- 如何在VS2013上比较两个迭代器进行单元测试
- 如何在提升单元测试中比较字符*与字符串
- 如何在Qt单元测试中比较数组
- 一般单元测试中的浮点比较
- 在c++中创建未命名容器,以便在单元测试中进行临时比较