c++ - 谷歌测试不处理异常

标签 c++ unit-testing exception

我正在使用 Google Test 对可能引发异常的类执行测试。我正在测试的方法是:

void SerialPortManager::OpenPort(PortID portNo) throw(){
try{
ports[portNo]->Open();
}
catch(exception &e){
    throw;
}
}

我用来测试它的测试是:

TEST(SerialPortManagerTest,ExceptionCatchedOnFailedOpen) {
PortID portID = COM1;

MockSerialPort* port1 = new MockSerialPort();
EXPECT_CALL(*port1, Open()).Times(Exactly(1)).WillOnce(Throw(SerialPortOpenErrorException()));

MockSerialPort* port2 = new MockSerialPort();
MockSerialPort* port3 = new MockSerialPort();

MockSerialPortFactory portFactory;
EXPECT_CALL(portFactory, CreateSerialPort(_)).Times(3).WillOnce(
        ReturnPointee(&port1)).WillOnce(ReturnPointee(&port2)).WillOnce(
        ReturnPointee(&port3));

SerialPortManager* serialPortManager = new SerialPortManager(
        (SerialPortFactoryInterface*) &portFactory);

EXPECT_ANY_THROW(serialPortManager->OpenPort(portID));

delete serialPortManager;
}

我希望测试通过,但我却得到:

terminate called after throwing an instance of 'SerialPortOpenErrorException'
  what():  Error Opening Serial Port

¿如何测试是否抛出异常?

最佳答案

你有一个异常说明符说这个函数不会抛出任何东西:

void SerialPortManager::OpenPort(PortID portNo) throw()
                                                ^^^^^^^

但是随后您尝试从函数中抛出异常。这将导致 terminate 被调用。

如果函数应该抛出异常,则移除异常说明符。如果不是,则以其他方式处理异常,而不是重新抛出它们。

关于c++ - 谷歌测试不处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167598/

相关文章:

asp.net-mvc - 断言 MVC Controller 操作的返回类型

c++ 异常:抛出 std::string

ios - 使用 NSFileHandle writedata 函数时无法捕获 "No space left on device"异常

c# - 尝试在 ASP.NET 网站中托管时出现 WCF 服务异常错误

c++ - 在 C++ 中从 C dll 生成对象

java - 模拟实例在@Mock 注释后为空

python - 在 tearDown() 方法中获取 Python 的单元测试结果

C++ 字符数组不工作

c++ - DirectX 11 : How to outline a bounding box?

c++试图更改函数中的局部变量