【发布时间】:2016-03-20 20:59:48
【问题描述】:
我需要为以下功能编写一些单元测试。为此,我需要模拟 ifstream 对象。我这样做了,但是我在测试期间控制执行时遇到了问题。如何设置获取返回的值
while(p_fileDescriptor->get(l_singleByte))
在一种情况下是 eofbit 对象,在另一种情况下是“正常” istream 对象?我尝试了一些选项,但它不起作用。你能帮我解决这个问题吗?
波纹管功能是我的单元测试。
测试功能:
void ServerSendFileRequestHandler::sendRequestedFile(std::shared_ptr<std::istream> p_fileDescriptor, int& p_clientSocket) const
{
unsigned int l_msgCounter = 1;
unsigned long long l_byteCounter = 0;
Message l_sendline;
memset(&l_sendline, 0, sizeof(l_sendline));
char l_singleByte;
while(p_fileDescriptor->get(l_singleByte))
{
checkIfReadByteSucceded(p_fileDescriptor, l_byteCounter);
l_sendline.payload[l_byteCounter] = l_singleByte;
l_byteCounter++;
if(l_byteCounter == PAYLOAD_SIZE)
{
std::cout << "Sending message number: " << l_msgCounter << std::endl;
sendClientSendFileInd(l_sendline, l_byteCounter, p_clientSocket);
l_msgCounter++;
l_byteCounter = 0;
memset(&l_sendline, 0, sizeof(l_sendline));
}
}
if(l_byteCounter)
{
std::cout << "Sending message number: " << l_msgCounter << std::endl;
sendClientSendFileInd(l_sendline, l_byteCounter, p_clientSocket);
l_msgCounter++;
}
std::cout << "Sending of file is done!" << std::endl;
}
我的单元测试:
#include "gmock/gmock.h"
#include <istream>
using namespace std;
class FstreamMock : public std::istream
{
public:
MOCK_METHOD1(get, istream&(char&));
};
using namespace testing;
TEST_F(ServerSendFileRequestHandlerTestSuite, sendRequestedFileTest)
{
int l_clientSocket = 0;
std::shared_ptr<FstreamMock> l_fileDescriptor;
const bool i = false;
char l_byte;
//EXPECT_CALL(*l_fileDescriptor, get(_)).WillRepeatedly(ReturnRef(*l_fileDescriptor));
EXPECT_CALL(*l_fileDescriptor, get(_)).WillRepeatedly(ReturnRef(*l_fileDescriptor);
m_sut.sendRequestedFile(l_fileDescriptor, l_clientSocket);
}
【问题讨论】:
标签: c++ unit-testing fstream googletest googlemock