Модульный тест C с ключевыми словами, специфичными для компилятора
Я пишу модульные тесты для некоторых встроенных C, которые выполняются на хост-компьютере (еще не тестируются на целевом компьютере) и компилируются с помощью GCC. Для тестирования я использовал систему сборки Ceedling с инфраструктурой тестирования Unity.
Один из файлов, который я хотел бы проверить, включает в себя файл (скажем, ах), который включает в себя другой файл (скажем, cpu.h), который является частью пакета поддержки платы от поставщика встроенных устройств, и использует ключевые слова, специфичные для целевого компилятора (например __cregister
например, в extern __cregister volatile unsigned int IER;
,
Другой проблемой, опять же с таким файлом, включенным из BSP, является встроенная сборка asm()
разделы, такие как в #define FOO_ASM asm("FOO")
,
Они оба, конечно, выдают ошибку при построении тестов, поскольку GCC не распознает эти ключевые слова.
Я думал, что смогу предотвратить добавление этих заголовков BSP, если Ceedling создаст макет, добавив #include "mock_a.h"
в мой тестовый файл, но GCC по-прежнему компилирует ах, и, следовательно, BH
Есть ли лучший способ решения таких проблем?
Я мог бы добавить что-то вроде ниже к рассматриваемому файлу BSP, но я не хочу изменять код поставщика, который изменил бы или переписал мои изменения с новой версией версии, я бы скорее понял, как правильно изолировать модуль.
// Unknown how __cregister is initially defined
#ifdef TEST
#undef __cregister // Redefine __cregister to nothing
#define __cregister
#endif
extern __cregister volatile unsigned int IER;
1 ответ
В итоге я следовал методу, указанному в ссылке в моем комментарии к ФП.
Так что для примера из моего оригинального поста
/* foo.h */
extern __cregister volatile unsigned int IER;
#define FOO_BAR_ASM asm("BAR");
Я создал следующий файл с тем же именем в test/support/
каталог и удалил путь включения для реальных файлов BSP из настроек тестовой сборки:
/*foo.h - in test/support */
extern volatile unsigned int IER;
#define FOO_BAR_ASM
Затем добавил, как включить #include "mock_foo.h"
в тестовый файл.