2009-01-26 60 views
3

我是Boost.Spirit和Boost.Test的新手,我想知道您是如何驗證語法的正確性的。下面是目前我如何做的一個簡化版本,我敢肯定還有更好的方法:Boost.Spirit的單元測試

每個測試用例都有一對兩個字符串,其中包含要解析的文本和預期結果以分號分隔。

解析函數執行實際解析並返回應該等於預期結果的字符串。

std::string parse(std::string const & line) { 
    std::string name; 
    int hours; 

    rule<> top_rule = ... ; // rule assignes values to 'name' and 'hours' 

    parse_info<> info = parse(line.c_str(), top_rule); 

    if(info.full) { 
    std::stringstream sstr; 
    sstr << name << ";" << hours; 

    return sstr.str(); 
    } 

    return "parser failed."; 
} 

BOOST_AUTO_TEST_SUITE(TestSuite) 

BOOST_AUTO_TEST_CASE(TestCase) { 
    BOOST_CHECK_EQUAL(parse("Tom worked for 10 hours."), "Tom;10"); 
} 

BOOST_AUTO_TEST_SUITE_END() 
+0

我不這樣做,但你爲什麼要「更好」? – user51568 2009-01-27 17:36:57

回答

1

一般來說,你的方法對我來說似乎很好。我可能會將測試類與具有描述性名稱的功能組合在一起,例如TestInvalidGrammar,TestErrorHandling,TestNestedGrammar等,並有從主調用。

我相信你已經閱讀文檔,但如果它有幫助,看看examples