我已经将CppUnit
和boost::test
都用于C++单元测试。通常,我更喜欢boost::test
,这主要是因为自动测试宏可以最大程度地减少设置测试的工作量。但是CppUnit
我真的想念一件事:注册自己的“保护器”的能力,该保护器的实例会自动包装所有运行测试。 (从技术上讲,您安装了一个测试“监听器”,并且可以将每个测试包装在保护器作用域中)。
我过去发现这些对于监视单元测试是否有意外的副作用非常有值(value)(例如,检查代码没有更改浮点单元状态标志)。我看不到boost::test
documentation中的任何等效项,尽管 BOOST_FIXTURE_TEST_CASE
可能最接近。
关于如何在boost::test
中最好地实现与CppUnit保护器相同的任何建议?
(我还没有真正研究boost::test
的实现,但是如果它类似于CppUnit
,则必须使用非常类似于保护器的东西)。
最佳答案
我从未使用过CppUnit,因此不确定保护器如何工作。您是否正在寻找可以包装单个测试或整个测试套件的产品?
对于前者,您可以使用提到的夹具,但据我所知,夹具应视为测试之外。他们设置了测试所需的任何内容,然后进行清理。任何实际的错误测试都应在测试本身中,但可以使用RAII轻松实现。只需定义一个类,该类检查析构函数中需要的内容,然后在测试开始时为其创建一个本地实例。由于它是首先构造的,因此它最后会被破坏,因此可以轻松地检查测试是否未修改任何意外状态。
如果您希望在执行完所有测试后对其进行检查,则可能需要global fixtures