C++ 何时在Boost测试库中使用手动注册?

C++ 何时在Boost测试库中使用手动注册?,c++,unit-testing,boost,registration,boost-test,C++,Unit Testing,Boost,Registration,Boost Test,我总是使用Boost测试的自动注册。现在我想知道,手动注册是为了什么?是否存在自动注册无法处理的情况 另外一句话,这次我也会用海龟来模仿 编辑: 我的问题似乎不清楚,更确切地说: 我什么时候应该使用手动注册而不是自动注册 我为什么要这样做?什么是现实生活中的情况,自动注册是不够的 您可以将类成员函数与boost::bind一起使用,您可以将参数绑定到函数等 如果您只使用基于自由函数的测试用例,请前进到 自动注册设备切换到它真的很容易 自动注册。你不必担心被遗忘 测试用例了吗 根据 为了缓解这个

我总是使用Boost测试的自动注册。现在我想知道,手动注册是为了什么?是否存在自动注册无法处理的情况

另外一句话,这次我也会用海龟来模仿

编辑: 我的问题似乎不清楚,更确切地说:

  • 我什么时候应该使用手动注册而不是自动注册
  • 我为什么要这样做?什么是现实生活中的情况,自动注册是不够的
  • 您可以将类成员函数与
    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手动注册与此类似,允许您使用算法(代码)指定测试列表,而不是单独列出每个测试

    当然,如果您的大多数测试都是唯一的,并且您没有使用不同的参数重复运行同一个测试,那么您可能看不到切换到手动注册的任何好处