2014-03-04 65 views
0

我正在使用谷歌测试来执行可能会抛出异常的类的测试。我测试的方法是:谷歌测试不处理异常

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 

¿我如何测试异常被抛出?

回答

2

你有一个异常说明称该功能将不扔东西:

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

但你尝试抛出一个异常出的功能。这将导致terminate被调用。

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

+0

无论如何,我会删除异常说明符。 –