[英]Unit-tests for Boost.Spirit
我是Boost.Spirit和Boost.Test的新手,我想知道如何驗證語法的正確性。 下面是我現在如何做的簡化版本,我很確定有更好的方法:
每個測試用例都有一對兩個字符串,其中包含要解析的文本和由分號分隔的預期結果。
解析函數執行實際解析並返回一個應該等於預期結果的字符串。
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()
在這里你可以看到他們(提升精神作者)如何測試他們自己的解析器: http : //svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp 。 對於qi的每個部分,你可以在這里找到一個C ++文件: http : //svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/ 。
一般來說,你的方法對我來說似乎很好。 我可能會將類測試組合成具有描述性名稱的函數,例如TestInvalidGrammar,TestErrorHandling,TestNestedGrammar等,並從主要調用那些調用。
我相信你已經閱讀了文檔,但如果它有幫助,請看一下示例 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.