我是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()
答案 0 :(得分:1)
总的来说,你的方法对我来说似乎很好。我可能会将一类测试分组到具有描述性名称的函数中,例如: TestInvalidGrammar,TestErrorHandling,TestNestedGrammar等,并从主要调用那些。
我确信您已阅读文档,但如果有帮助,请查看examples。
答案 1 :(得分:1)
在这里,您可以看到他们(提升精神作者)如何测试他们自己的解析器: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/。