2014-03-04 134 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

無論如何,我會刪除異常說明符。 –