При повторном использовании FFF Fakes в нескольких файлах набора тестов возникает ошибка компоновщика для функций _resetC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 При повторном использовании FFF Fakes в нескольких файлах набора тестов возникает ошибка компоновщика для функций _reset

Сообщение Anonymous »

Я хочу создать один исполняемый файл теста, состоящий из нескольких файлов .cc, каждый из которых представляет отдельный набор тестов. Я использую gtest в качестве платформы и Fake Function Framework (FFF) для имитации вызовов библиотеки C. Я пытаюсь определить подделки в одном файле .h/.c, а затем использовать его в разных наборах тестов. У меня возникла проблема с вызовом функции сброса поддельного заголовка.
Поддельный заголовок

Код: Выделить всё

#pragma once

#include "fff.h"
#include "osdp.h"

DECLARE_FAKE_VALUE_FUNC(osdp_t*, osdp_cp_setup, int, const osdp_pd_info_t *);
DECLARE_FAKE_VOID_FUNC(osdp_cp_teardown, osdp_t *);
...

// List of fakes used by these unit tests
#define FFF_FAKES_LIST(FUNC)            \
FUNC(osdp_cp_setup)                 \
FUNC(osdp_cp_teardown)              \
...
Фальшивая реализация

Код: Выделить всё

#include "FakeLibosdp.h"

DEFINE_FFF_GLOBALS

DEFINE_FAKE_VALUE_FUNC(osdp_t*, osdp_cp_setup, int, const osdp_pd_info_t *);
DEFINE_FAKE_VOID_FUNC(osdp_cp_teardown, osdp_t *);
...
Использование при настройке тестового набора. У меня есть еще один файл тестового набора, похожий и в котором тоже используются подделки.

Код: Выделить всё

#include "FakeLibosdp.h"
#include "MockSerial.hh"

class OsdpPdACRTest : public ::testing::Test {
protected:
void SetUp() {
// Register resets

// Linker can't find _reset function
FFF_FAKES_LIST(RESET_FAKE);
// This also doesn't work
RESET_FAKE(osdp_pd_notify_event);

// Reset common FFF internal structures
FFF_RESET_HISTORY();
}
};
...
Если я закомментирую FFF_FAKES_LIST() или RESET_FAKE, код компилируется и запускается, но происходит сбой, поскольку я не могу сбросить подделки между тестовыми примерами. Если я оставлю это, я получу ошибку

Код: Выделить всё

x86_64-buildroot-linux-gnu_sdk-buildroot/bin/../lib/gcc/x86_64-buildroot-linux-gnu/9.3.0/../../../../x86_64-buildroot-linux-gnu/bin/ld: tests/gtests/module/osdp/CMakeFiles/test-osdp.dir/test-osdp-pd-acreader.cc.o: in function `OsdpPdACRTest::SetUp()':
/tests/gtests/module/osdp/test-osdp-pd-acreader.cc:17: undefined reference to `osdp_pd_notify_event_reset()'
В моем CMakeLists.txt я добавил FakeLibosdp.h в путь включения и FakeLibosdp.c в качестве исходного файла для исполняемого файла. Я видел на GitHub FFF пример компиляции фейков в библиотеку с последующим связыванием приложения, которое, вероятно, здесь сработает, но кажется ненужным и странным, все работает, но сбрасывается.

Подробнее здесь: https://stackoverflow.com/questions/792 ... rror-for-r
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неопределенная ссылка на «fff» в компоновщике [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать файл .nfo в файл .fff
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Есть ли альтернатива Microsoft Fakes в .NET Core?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Microsoft Fakes и конструктор реальных объектов
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Параллельное выполнение тестов одного и того же набора тестов с различным набором данных, таких как браузер, среда, имя
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»