我在 CSV 檔案中有以下內容
Column1, Column2, Column3, Column4, Column5
something, false, somemore, 1.010000, 1.020000
上面的 CSV 檔案內容是std::string從我的庫的方法中回傳的。
std::string GetCsvContent() {
// Create csv content
return csv_content;
}
現在我想進行單元測驗GetCsvContent。我知道某個輸入會回傳什么。但是為了能夠進行測驗,我需要在 .csv 檔案中預先宣告 CSV 內容std::string。像下面這樣的東西。
std::string expected_csv_content = "Column1, Column2, Column3, Column4, Column5\nsomething, false, somemore, 1.010000, 1.020000";
EXPECT_EQ(expected_csv_content, my_library_object.GetCsvContent());
但是上面的宣告方式expected_csv_content是不正確的,因為它與以下資料的格式不完全匹配。
Column1, Column2, Column3, Column4, Column5
something, false, somemore, 1.010000, 1.020000
有沒有辦法像下面這樣用 R 表示法宣告?
const std::string expected_csv_content = R"(
Column1, Column2, Column3, Column4, Column5
something, false, somemore, 1.010000, 1.020000
)";
問題:
我的問題是如何硬編碼或宣告 CSV 或任何小檔案的內容以std::string進行比較?
uj5u.com熱心網友回復:
您可以使用原始字串文字,但問題是這些行縮進也是字串的一部分,您在開頭和結尾添加的換行符也是字串的一部分。使用原始字串的另一個問題是換行符本身——如果您最終使用文本編輯器將特定于作業系統的換行符放入您的代碼(例如CRLF)中,您可能最終會導致測驗失敗并且很難找出原因。
我首先懷疑不匹配問題是因為您的 CSV 在每一行之后輸出一個換行符,但是在您的(非原始)測驗字串中,您沒有在末尾放置換行符。
如果您希望代碼中的布局更好,那么您可以按如下方式連接普通字串文字:
const std::string expected_csv_content =
"Column1, Column2, Column3, Column4, Column5\n"
"something, false, somemore, 1.010000, 1.020000\n";
有了上面的內容,很容易查看資料,如果您想向測驗添加內容,您可以輕松地復制/粘貼行,并且您可以很好地了解換行符。如果您想為其他測驗復制多行文本,您可以使用簡單的正則運算式搜索/替換在字串形式和原始文本之間輕松轉換。
uj5u.com熱心網友回復:
如果我的專案中需要有常量資料,這些資料最初存盤在某些檔案中,獨立于生產或測驗代碼,我只需將輸入檔案轉換為字符陣列并將其用作字串或其他任何內容。
示例:檔案:file.txt
hallo
test
xxd -i 檔案.txt > 檔案.h
file.h 的內容變為:
unsigned char test_txt[] = {
0x68, 0x61, 0x6c, 0x6c, 0x6f, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x0a
};
unsigned int test_txt_len = 11;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349111.html
下一篇:這是串列初始化還是值初始化?
