문제

나는 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/.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top