C++ 何时在Boost测试库中使用手动注册?
我总是使用Boost测试的自动注册。现在我想知道,手动注册是为了什么?是否存在自动注册无法处理的情况 另外一句话,这次我也会用海龟来模仿 编辑: 我的问题似乎不清楚,更确切地说:C++ 何时在Boost测试库中使用手动注册?,c++,unit-testing,boost,registration,boost-test,C++,Unit Testing,Boost,Registration,Boost Test,我总是使用Boost测试的自动注册。现在我想知道,手动注册是为了什么?是否存在自动注册无法处理的情况 另外一句话,这次我也会用海龟来模仿 编辑: 我的问题似乎不清楚,更确切地说: 我什么时候应该使用手动注册而不是自动注册 我为什么要这样做?什么是现实生活中的情况,自动注册是不够的 您可以将类成员函数与boost::bind一起使用,您可以将参数绑定到函数等 如果您只使用基于自由函数的测试用例,请前进到 自动注册设备切换到它真的很容易 自动注册。你不必担心被遗忘 测试用例了吗 根据 为了缓解这个
boost::bind
一起使用,您可以将参数绑定到函数等
如果您只使用基于自由函数的测试用例,请前进到
自动注册设备切换到它真的很容易
自动注册。你不必担心被遗忘
测试用例了吗
根据
为了缓解这个问题,UTF
提供用于自动(就地)创建测试用例和
在测试树中注册这些设施牺牲了一些
通用性,仅适用于选定的测试功能签名。
然而,我从未遇到自动测试注册失败的情况。例如,您可以测试功能(使用
BOOST\u AUTO\u test\u CASE
)、功能模板(使用BOOST\u AUTO\u test\u CASE\u模板
)和夹具类的成员函数(使用BOOST\u Fixture\u test\u CASE
) 当您希望对测试内容和顺序进行细粒度控制时。例如,基于命令行参数的MPE。在我的例子中,由于我希望测试是如何完成的,手动注册更容易
这是因为我有少量的测试应用于大量的类,每个类实现相同的接口。这些文件格式处理程序支持多种不同的文件格式,我希望对每种格式执行相同的测试(例如,以每种格式打开一个文件并尝试读取一些数据)
最初我使用的是自动注册,我必须为每个支持的文件格式复制测试用例。实际上,我是通过一个#include
和一些预编译技巧来实现这一点的,但是它很难维护
相反,我现在切换到手动注册,因为这允许我创建一组测试,并将这些测试添加到树中几十次,每个副本针对不同的类运行(以测试每个文件格式)。代码更干净,大多数#ifdef
行现在都消失了,这很好
你的问题的答案类似于你是否会用元编程解决C++编码问题。C++元编程可以有点像自动复制和粘贴,这样你就可以键入更少的代码,编写更通用的算法,让编译器代替这项工作。使用Boost.Test手动注册与此类似,允许您使用算法(代码)指定测试列表,而不是单独列出每个测试
当然,如果您的大多数测试都是唯一的,并且您没有使用不同的参数重复运行同一个测试,那么您可能看不到切换到手动注册的任何好处