2009-01-26 8 views
3

Je suis nouveau à Boost.Spirit et Boost.Test et je voudrais savoir comment vous vérifiez l'exactitude de vos grammaires. Ci-dessous est une version simplifiée de la façon dont je le fais pour le moment et je suis sûr qu'il y a une meilleure façon:Tests unitaires pour Boost.Spirit

Chaque cas de test possède une paire de deux chaînes contenant le texte à analyser et le résultat attendu délimité par des points-virgules .

Les fonctions d'analyse effectuent l'analyse réelle et retournent une chaîne qui doit être égale au résultat attendu.

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() 
+0

Je ne sais pas, mais pourquoi tu le veux "mieux"? – user51568

+1

Je diviserais cela en une question et une réponse possible. De cette façon, les gens peuvent voter s'ils pensent que votre solution est vraiment la meilleure. – itsadok

Répondre

1

En général, votre approche semble bien pour moi. Je regrouperais probablement la classe de tests en fonction avec des noms descriptifs, par ex. TestInvalidGrammar, TestErrorHandling, TestNestedGrammar etc. et ont ceux appelés de la main.

Je suis sûr que vous avez lu la documentation, mais jetez un oeil à examples si cela aide.