Pergunta

Eu sou novo para Boost.Spirit e Boost.Test e eu gostaria de saber como você verificar a regularidade de suas gramáticas. Abaixo está uma versão simplificada de como eu faço isso no momento e eu tenho certeza que há uma maneira melhor:

Cada caso de teste hase um par de duas cordas que contêm o texto para analisar e o resultado esperado delimitada por ponto e vírgula.

As funções de análise faz a análise real e retorna uma string que deve ser igual ao resultado esperado.

 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()
Foi útil?

Solução

Em geral, sua abordagem parece-me muito bem. Eu provavelmente classe grupo de testes em função com nomes descritivos, por exemplo, TestInvalidGrammar, TestErrorHandling, TestNestedGrammar etc. e têm os chamados da principal.

Estou certo de que você leu documentação, mas dar uma olhada em exemplos se isso ajuda.

Outras dicas

Aqui você pode ver como eles (os autores impulso espírito) testar os seus próprios analisadores: http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp . Para cada parte de qi pode encontrar um arquivo C ++ aqui: http :. //svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top