簡體   English   中英

Boost.Spirit的單元測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM