3

Boost.Spirit と Boost.Test は初めてなので、文法の正確性をどのように検証しているか知りたいです。以下は、現時点で私が行っている方法の簡略化されたバージョンであり、より良い方法があると確信しています。

各テスト ケースには、解析するテキストと、セミコロンで区切られた期待される結果を含む 2 つの文字列のペアがあります。

解析関数は実際の解析を行い、期待される結果と等しい文字列を返します。

 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()
4

2 に答える 2

1

一般的に、あなたのアプローチは私には問題ないようです。私はおそらく、テストのクラスをわかりやすい名前で関数にグループ化します。たとえば、TestInvalidGrammar、TestErrorHandling、TestNestedGrammarなどで、メインから呼び出されます。

ドキュメントを読んだことは確かですが、役立つ場合は例を見てください。

于 2009-02-05T16:25:12.333 に答える
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/ にあります。

于 2013-12-09T14:02:27.150 に答える