Юнит-тесты для Boost.Spirit - PullRequest
       6

Юнит-тесты для Boost.Spirit

3 голосов
/ 26 января 2009

Я новичок в 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()

Ответы [ 2 ]

1 голос
/ 09 декабря 2013

Здесь вы можете увидеть, как они (авторы буст-духа) тестируют свои собственные парсеры: 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/.

1 голос
/ 05 февраля 2009

В общем, ваш подход мне подходит. Возможно, я бы сгруппировал класс тестов в функцию с описательными именами, например, TestInvalidGrammar, TestErrorHandling, TestNestedGrammar и т. Д. И имеют те, которые вызываются из основного.

Я уверен, что вы прочитали документацию, но посмотрите на примеры , если это поможет.

...