boost.spirit를위한 단위 테스트
-
20-08-2019 - |
문제
나는 boost.spirit and 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()
해결책
일반적으로, 당신의 접근 방식은 나에게 괜찮아 보입니다. 아마도 테스트 이름 (예 : testinvalidgrammar, testerrorhandling, testnestedgrammar 등)을 기능으로 그룹화 할 것입니다.
나는 당신이 문서를 읽었다고 확신하지만 예 도움이된다면.
다른 팁
여기에서 당신은 그들이 (부스트 정신 작가) 자신의 파서를 어떻게 테스트하는지 볼 수 있습니다. http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/grammar.cpp . Qi의 각 부분에 대해 C ++ 파일을 여기에서 찾을 수 있습니다. http://svn.boost.org/svn/boost/trunk/libs/spirit/test/qi/.
제휴하지 않습니다 StackOverflow