質問

私は 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()
役に立ちましたか?

解決

一般的に、あなたのアプローチは、私には罰金です。私は説明的な名前、例えば持つ関数へのテストのグループクラス、おそらくだろうTestInvalidGrammar、TestErrorHandling、TestNestedGrammarなど、メインから呼び出されたものを持っています。

私はあなたのドキュメントを読んでいると確信していますが、<のhref = "http://www.boost.org/doc/libs/1_37_0/libs/test/doc/html/utf/user-guide/を見てみましょうそれは場合に役立ちますテスト組織/手動引数なしのテスト-case.html」のrel = "nofollowをnoreferrer">例がします。

他のヒント

ここでは、彼ら (Boost Spirit の作者) が独自のパーサーをテストする方法を確認できます。 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/.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top