1
我有以下YAML腳本,我在這裏測試:online yaml parserYAML-CPP麻煩解析混合陣列/串節點
testcases:
- testcase:
desc: 'TEST TC1'
requirement-ref: Doors-10.1.1.0
given:
text: 'A UUT, TEST2 and TEST are connected'
devices:
- Device:
Type: UUT
Status: Connected
- Device:
Type: TEST
Status: Connected
- Device:
Type: TEST2
Status: Connected
- testcase: # next test case...
desc: 'TEST TC2'
然後,我有以下代碼:
#include <iostream>
#include <unistd.h>
#include <ctime>
#include "yaml-cpp/yaml.h"
using namespace std;
void load_config()
{
cout << "loading yaml file\n";
YAML::Node testfile = YAML::LoadFile("BDD-test-case.yaml");
if (testfile["testcases"])
{
cout << "found testfile[\"testcases\"] - size: " << testfile["testcases"].size() << "\n";
YAML::Node testcases = testfile["testcases"];
for (int i = 0; i < testcases.size(); i++)
{
YAML::Node testcase = testcases[0];
cout << "testcase " << i << ":\n";
cout << "\tsize:" << testcase.size() << "\n";
cout << "\tIsNull:" << testcase.IsNull() << "\n";
YAML::Node desc = testcase["desc"];
if (desc)
{
std::string desc_str = desc.as<std::string>();
cout << "desc: " << desc_str.c_str() << "\n";
}
}
}
cout << "yaml - done\n";
}
int main(int argc, char *argv[])
{
long double lastTimeMS = time(0)*1000;
long double CurrTimeMS = time(0)*1000;
int localPort = 31010;
int remotePort = 31011;
int procId = 1;
load_config();
cout << "Hello World!" << endl;
return 0;
}
我得到的以下輸出:
loading yaml file
found testfile["testcases"] - size: 2
testcase 0:
size:1
IsNull:0
testcase 1:
size:1
IsNull:0
yaml - done
Hello World!
我想解析每個測試用例並打印出「desc」字段。
從調試中可以看到,我能夠找到頂級節點testcases
。我檢查它的大小,它是2 - 這是正確的。然後我遍歷測試用例,並將它們分別存儲爲新節點testcase = testcases[i]
。到現在爲止還挺好。但是現在我想看看每個測試用例裏面有什麼 - 我應該找到一個tsetcase [「desc」] ......但我沒有看到。 Infact testcase似乎爲空...
我在這裏做錯了什麼?
謝謝你提供的;我不太清楚你的意思......爲了澄清,我希望「desc」是「testcase」的一個子元素。因此,「測試用例」被定義爲具有描述「desc」,需求引用「require-ref」和稱爲「給定」的對象,其本身將包含子元素。我查看了我在YAML中編寫的JSON輸出,並且我相當確定這是我想要的......但問題是「testcase」顯示爲空:( –
在文檔中「desc」的路徑是'[「testcases」] [0] [「testcase」] [「desc」]'你試圖將它讀作'[「testcases」] [0] [「desc」]' –
Ahhh .. ..我明白了,所以也許我的yaml是錯誤的,正如你所說 - 節點「testcase」似乎不是必需的,但是最後我得到一條只有'-'破折號的行......看起來很奇怪。現在,當我明天開始工作時,我會測試它,並讚揚答案,謝謝!:) –