2
Google Mock Framework를 사용하여 직렬 포트 관리자 클래스를 통한 단위 테스트를 수행하고 있습니다. 내가 테스트를 실행하면Google mock을 사용하는 포인터 오류가 잘못되었습니다.
TEST(SerialPortManagerTest,AllPortsAreClosedAtInit){
MockSerialPort port1;
EXPECT_CALL(port1, IsOpen()).Times(Exactly(1)).WillOnce(Return(false));
MockSerialPort port2;
EXPECT_CALL(port2, IsOpen()).Times(Exactly(1)).WillOnce(Return(false));
MockSerialPort port3;
EXPECT_CALL(port3, IsOpen()).Times(Exactly(1)).WillOnce(Return(false));
SerialPortInterface* port1Ptr=&port1;
SerialPortInterface* port2Ptr=&port2;
SerialPortInterface* port3Ptr=&port3;
MockSerialPortFactory portFactory;
EXPECT_CALL(portFactory, CreateSerialPort(_)).Times(3).
WillOnce(ReturnPointee(&port1Ptr)).
WillOnce(ReturnPointee(&port2Ptr)).
WillOnce(ReturnPointee(&port3Ptr));
SerialPortFactoryInterface* portFactoryPtr=&portFactory;
SerialPortManager* serialPortManager =new SerialPortManager(portFactoryPtr);
EXPECT_FALSE(serialPortManager->GetPort(COM1)->IsOpen());
EXPECT_FALSE(serialPortManager->GetPort(COM2)->IsOpen());
EXPECT_FALSE(serialPortManager->GetPort(COM3)->IsOpen());
}
가 잘못된 반환 : 내가 사용 클래스 다이어그램 내가 직렬 포트 관리자를 테스트하기 위해 준비했습니다 시험의
하나입니다 포인터 오류 :
free(): invalid pointer: 0xbfc8d8e4 ***
문제를 보면 나는 내가 SerialPortManag에 serialPortFactory을 삭제 라인을 주석 처리하면 오류가 반환되지 않습니다 발견 소멸자.
SerialPortManager::~SerialPortManager() {
for (int i = 0; i < PORT_COUNT; i++) {
delete ports[i];
}
//delete serialPortFactory;
}
이 잘못된 포인터 오류가 발생하지 않고 serialPortFactory를 조롱 할 수 있습니까?