c++使用boost测试
c++ Using boost test
如何将以下代码转换为使用boost单元测试框架:
#include <iostream>
#include <fstream>
#include "graph.hh"
int main(int argc, char **argv) {
const char* ifile = argv[1];
Graph gp;
gp.read_xml(ifile);
std::cout << "Checking number of nodes and edges..." << std::endl;
int nodes_expected = 16;
if(nodes_expected != gp.nodes()) {
std::cout << "Test Failed." << std::endl;
std::cout << "Expected: " << nodes_expected << std::endl;
std::cout << "Result: " << gp.nodes() << std::endl;
}
int edges_expected = 15;
if(edges_expected != gp.edges()) {
std::cout << "Test Failed." << std::endl;
std::cout << "Expected: " << edges_expected << std::endl;
std::cout << "Result: " << gp.edges() << std::endl;
}
return 0;
}
我已经在(Boost Test)上阅读了文档,但它没有告诉我如何从命令行摄取参数。否则,我可以使用BOOST_CHECK_EQUAL
#include <boost/test/included/unit_test.hpp>
#include <fstream>
#include "graph.hh"
using namespace boost::unit_test;
BOOST_AUTO_TEST_CASE( test_num_of_nodes )
{
Graph gp;
gp.read_xml( framework::master_test_suite().argv[1] );
BOOST_MESSAGE( "Checking number of nodes and edges..." );
BOOST_CHECK_EQUAL(16, gp.nodes());
BOOST_CHECK_EQUAL(15, gp.edges());
}
在boost单元测试套件中,您不需要按照您所描述的方式创建一个简单的程序。您不编写测试工具,而是编写由许多功能(每个测试用例一个)构建的测试套件。这些函数不接受命令行参数。
您编写的测试用例函数将是:
- 虚函数(无参数)
- 一元函数(一个参数)
- 基于模板类构建(提供模板参数)
所以,你会想要从一个单独的硬编码文件路径解析你的参数(将参数写入第二个文件,而不是在命令行上传递它们),并将它们传递给单函数测试用例,或者简单地放弃并硬编码你的文件路径到你的测试套件,可能每个测试用例(函数)一个文件。
单元测试套件是这样设计的,因此它们可以在标准测试运行器中运行,也可以在任意运行器中运行,后者可能会有自己的命令行参数,并且需要特别注意支持自定义命令行参数。
测试运行器为您提供了许多可插入的灵活性,以满足您未来的需求(标准化的测试运行、过滤、日志记录等),但是您必须放弃一些类似程序的灵活性才能实现。
我认为最好的解决方案是将ifile
嵌入像xxd这样的程序(检查-include选项),参见http://linuxcommand.org/man_pages/xxd1.html。
这将给你一个带有字符数组的文件,你可以#include在。
现在您可以使用自定义命令行参数,这是在Boost::test中添加的,如
#define BOOST_TEST_MODULE runtime_configuration1
#include <boost/test/included/unit_test.hpp>
using namespace boost::unit_test;
BOOST_AUTO_TEST_CASE(test_accessing_command_line)
{
BOOST_TEST_REQUIRE( framework::master_test_suite().argc == 3 );
BOOST_TEST( framework::master_test_suite().argv[1] == "--specific-param" );
BOOST_TEST( framework::master_test_suite().argv[2] == "'additional value with quotes'" );
BOOST_TEST_MESSAGE( "'argv[0]' contains " << framework::master_test_suite().argv[0] );
}
从https://www.boost.org/doc/libs/1_70_0/libs/test/doc/html/boost_test/runtime_config/custom_command_line_arguments.html 相关文章:
- 在cygwin中测试新的boost安装时出现cpp错误
- 在macOS Mojave上发布BOOST unit_test_framework/Google测试
- 使用 C++ Boost.Test 组织单元测试?
- 如何使用Boost单元测试框架测试Qt应用程序
- 使用Boost.UTF进行Bazel测试
- 使用 CLion 在不同文件中分离 Boost 测试套件的正确方法
- 我错过了boost :: mpi ::请求?测试似乎改变了状态
- Boost 的数据驱动测试的联接运算符"+"损坏了第一列
- 我应该使用boost.test分别测试不同类别的类别
- 如何使用boost :: spirit :: x3测试有效的双重内容
- CMAKE Boost 单元测试框架在 Mac 上不起作用
- 如何在QT Creator中运行Boost单元测试
- Boost单元测试夹具继承测试类,是否可以访问受保护的方法
- 使用Boost C 单元测试套件测试非致命错误消息
- 由 Boost 单元测试框架 dll 导出的 std::basic_ostringstream 会导致"already defined symbol"错误
- 从 Visual Studio 2010 运行 BOOST 单元测试
- 单元测试Boost FilesySty create_directories
- 关于c++ /Boost的基本知识-测试Boost
- 测试boost::mpl::or_的计算结果是真还是假
- 如何测试boost共享内存对象是否被删除?