如何在std::string中硬编码CSV等小文件内容用于单元测试对比
你当前的写法会引入额外的前导换行、每行缩进空格,和实际CSV内容不一致,才会导致匹配失败,正确硬编码方式如下:
方案1:C++原始字符串字面量(推荐)
原始字符串字面量会完全保留括号内的所有字符,只需保证括号内内容和预期CSV完全一致,不要额外添加缩进、前导/后置换行即可:
const std::string expected_csv_content = R"(Column1, Column2, Column3, Column4, Column5 something, false, somemore, 1.010000, 1.020000 )";
如果待嵌入的内容本身包含)字符,会和结束标记冲突,可以自定义分隔符避免冲突:
// 分隔符可自定义,只要内容中不存在")MY_DELIM"即可 const std::string expected_csv_content = R"MY_DELIM(Column1, Column2, Column3, Column4, Column5 something, false, somemore, 1.010000, 1.020000 )MY_DELIM";
方案2:普通字符串拼接
如果不使用原始字符串,也可以通过普通字符串字面量自动拼接的特性实现,手动添加换行转义符\n即可:
const std::string expected_csv_content = "Column1, Column2, Column3, Column4, Column5 \n" "something, false, somemore, 1.010000, 1.020000\n";
如果要嵌入的文件内容较大,不想手动复制,也可以在编译阶段直接把文件嵌入二进制:比如使用GCC/Clang的ld命令将文件转为目标文件,链接到程序后直接读取对应符号的内容即可,单元测试场景下小文件直接硬编码更便捷。
内容的提问来源于stack exchange,提问作者TheWaterProgrammer
相关产品推荐
相关产品推荐

