У меня есть модуль, записанный на C., в котором я определен API, определяемый следующим образом. < /p>
int ReadData(void* data, int data_size, char* filename, int offset)
При тестировании модуля, чтобы покрыть полное покрытие, мне нужно нажать в условиях ошибки для вызова системы FSEEK и Fread.
Может ли кто -нибудь объяснить мне, как я могу переопределить Fseek/Fread во время конкретного тестового случая, чтобы вместо системы вызовы он позвонил в Mockeek/Fread для этого тестового случая?ReadAPI.c
< /code>
#include
#include
int readdata(void* data,int size, int offset, char* filename)
{
if(data == NULL || size == 0 || filename == NULL)
{
return -1;
}
FILE* fp = fopen(filename,"rb");
if(fp == NULL)
{
return -1;
}
if(fseek(fp,offset,SEEK_SET) != 0)
{
fclose(fp);
return -1;
}
fread(data,size,1,fp);
if(ferror(fp))
{
fclose(fp);
return -1;
}
fclose(fp);
return 1;
}
< /code>
readapi.h
< /code>
#include
#include
int readdata(void* data,int size, int offset, char* filename)
< /code>
Test.cpp
< /code>
#include
#include"readapi.h"
TEST(test, Test1fseek)
{
// When fseek called in readdata API call mock fseek to hit fseek fail
// fseek(){return -1;}
char data[10] = {0};
int status = readdata(data,sizeof(data),0,"test.txt");
EXPECT_EQ(status, -1);
}
TEST(test, Test2fread)
{
//When fread called in readdata API call mock fread to hit read fail
// fread(){return -1;}
char data[10] = {0};
int status = readdata(data,sizeof(data),0,"test.txt");
EXPECT_EQ(status, -1);
}
int main()
{
return RUN_ALL_TEST();
}
Подробнее здесь: https://stackoverflow.com/questions/710 ... googlemock
Как издеваться над системным вызовом в модельном тестировании C ++ во время выполнения с помощью Googlemock? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Умные указатели и полиморфизм - использование в модельном классе вызывает проблемы с литьем
Anonymous » » в форуме C++ - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-