Я пишу модульный тест для моего проекта на c ++, где есть много функций, которые вызывают функции glibc (malloc, read, open, write, close и т. Д.), А также некоторые функции внешних библиотек, такие как openssl (функции SHA256).
Например, следующая функция вычисляет контрольную сумму SHA256 для данного файла. Теперь эта функция имеет несколько вызовов стандартных / внешних библиотечных функций, таких как, fopen, SHA256_Init, malloc и т. Д. Теперь, как заблокировать вызовы этих функций, поскольку наша главная цель - выполнить модульное тестирование файла SHA256, а не функций, которые она вызывает.
int MyClass::SHA256File(const char *path, char outputBuffer[65])
{
FILE *file = fopen(path, "rb");
if(!file) {
throw exception("Failed to open file for SHA256 computation.");
}
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
if ( !SHA256_Init(&sha256) ) {
throw exception("SHA256_Init failed.");
}
const int bufSize = 32768;
unsigned char *buffer = (unsigned char*) malloc(bufSize);
int bytesRead = 0;
if(!buffer) {
throw exception("Failed to allocate buffer for SHA256 computation.");
}
while( fgets((char*)buffer, bufSize, file) != NULL ) {
curr_pos = ftell(file);
bytesRead = curr_pos - last_pos;
last_pos = curr_pos;
if( !SHA256_Update(&sha256, buffer, bytesRead) ) {
throw exception("SHA256_Update failed..");
}
}
if ( ferror(file) ) {
throw exception("Failed to read file for SHA256 computation.");
}
if( !SHA256_Final(hash, &sha256) ) {
throw exception("SHA256_Final failed..");
}
int i = 0;
for(i = 0; i < SHA256_DIGEST_LENGTH; i++) {
sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
}
outputBuffer[64] = 0;
fclose(file);
free(buffer);
return 0;
}
У меня есть несколько указателей, таких как glibcmock , но я бы предпочел иметь некоторую стандартную поддержку, если glibc / gmock может предоставить.
Заранее спасибо.