c++ - Boost.Spirit 的单元测试

标签 c++ unit-testing boost boost-spirit boost-test

我是 Boost.Spirit 和 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 等,并从 main 中调用它们。

我确定您已阅读文档,但请查看 examples如果有帮助。

关于c++ - Boost.Spirit 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/479431/

相关文章:

unit-testing - 如何在 vitest、vue/test-utils vue3 中对 vueuse/head 进行单元测试

c++ - boost::regex 库中的内存泄漏

c++ - 如何将 boost::gregorian::date 转换为 mm/dd/yyyy 格式,反之亦然?

c++ - 创建多个监听套接字

c++ - 我如何访问 OpenCV 中的高维矩阵元素?

c# - 将自定义类型用于参数化 MSTest

php - 对需要发送 header 的项目进行单元测试

vim - 如何通过boost减少clang_complete搜索的时间

c++ - 32B block ,连续和非连续内存访问

c++ - 如何在OpenCV C++中使用FeatureDetector?