我是新来Boost.Spirit和如Boost.Test,我想知道你们是如何验证语法的正确性。下面是我如何在此刻做的简化版本,我敢肯定,有一个更好的方法:

每个测试用例HASE一对包含文本解析两个字符串和由分号分隔的预期的结果。

在解析功能执行实际的解析,并返回其应该等于预期的结果的字符串。

 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()
有帮助吗?

解决方案

在一般情况下,你的做法似乎没什么问题。我可能会组类的测试与描述性名称,例如功能TestInvalidGrammar,TestErrorHandling,TestNestedGrammar等并且已经那些称为从主

我相信你已经阅读文档,但看一看的范例如果它帮助。

其他提示

在这里,你可以看到他们(升压精神作者)如何测试自己的解析器:的 http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp 。对于气血的每一个部分,你可以在这里找到一个C ++文件: HTTP ://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top