Frage

Ich bin neu in Boost.Spirit und Boost.Test und ich würde gerne wissen, wie Sie die Richtigkeit Ihrer Grammatiken überprüfen. Nachfolgend finden Sie eine vereinfachte Version, wie ich es im Moment tun, und ich bin mir ziemlich sicher, dass es ein besserer Weg:

Jeder Testfall hase ein Paar von zwei Strings mit dem Text durch Semikolons getrennt zu analysieren und das erwartete Ergebnis.

Die Parsing-Funktionen führen die eigentliche Analyse und gibt eine Zeichenfolge, die mit dem erwarteten Ergebnis gleich sein sollten.

 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()
War es hilfreich?

Lösung

In der Regel Ihr Ansatz scheint mir in Ordnung. Ich würde wahrscheinlich Gruppe Klasse von Tests in Funktion mit beschreibenden Namen, z TestInvalidGrammar, TestErrorHandling, TestNestedGrammar usw. und hat die aus dem Haupt genannt.

Ich bin sicher, dass Sie die Dokumentation gelesen haben, aber einen Blick auf Beispiele , wenn es hilft.

Andere Tipps

Hier können Sie sehen, wie sie (die Boost-Geist Autoren) testen ihre eigenen Parser: http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp . Für jeden Teil des Qi können Sie eine C ++ Datei finden Sie hier: http :. //svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top