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