gpt4 book ai didi

c++ - boost 单元测试 : Catch an unsuccessful Test

转载 作者:行者123 更新时间:2023-11-27 23:12:27 28 4
gpt4 key购买 nike

我正在运行一个测试,打开一个 USB 设备,发送和接收一个数据包,然后再次关闭。它看起来像这样:

void TestCase1(void)
{
int recv;
BOOST_REQUIRE(initDevice());
BOOST_REQUIRE(openDevice());
BOOST_REQUIRE_EQUAL(receiveData(), 5);
BOOST_REQUIRE(closeDevice());
BOOST_REQUIRE(uninitDevice());
}

现在,每当 receiveData() 调用出现错误并且“5”检查失败时,closeDevice()uninitDevice() 不再被调用,我无法在下一次测试中使用该设备。有办法处理这个吗?也许捕获异常并关闭并取消初始化该捕获范围内的设备?或者这是一个完全错误的方法?我对单元测试很陌生。所以任何帮助表示赞赏。谢谢!

最佳答案

我会使用现代 C++ 中的一个关键概念,RAII , 以帮助保持 initDevice/uninitDevice 和 openDevice/closeDevice 绑定(bind)在一起:

class USBDeviceHandler
{
public:
USBDeviceHandler()
: initDeviceHandle { ::initDevice()), &::uninitDevice },
openDeviceHandle { ::openDevice()), &::closeDevice }
{
}

using init_handle = std::unique_ptr<void, decltype(&::uninitDevice)>;
using open_handle = std::unique_ptr<void, decltype(&::closeDevice)>;

init_handle initDeviceHandle;
open_handle openDeviceHandle;
};

void TestCase1(void)
{
int recv;
USBDeviceHandler device; //init/open is called upon construction
BOOST_REQUIRE_EQUAL(receiveData(), 5);
}//close/uninit is called upon destruction

这是基于 Rule of Zero 中给出的示例.

关于c++ - boost 单元测试 : Catch an unsuccessful Test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19297616/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com