Я в настоящее время работаю над кодовой базой, которая никогда не имела никаких модульных тестов, записанных на нем. Это было записано для 16-разрядного процессора Embedded, и я хотел бы начать добавлять модульные тесты на весь код, который я пишу, как минимум и затем расширяю это до других частей кода.
Моя проблема с этим, я нашел, что каждый модуль (.c файл) на прикладном уровне, кажется, сильно связывается в другие файлы C в проекте. Для любого данного файла это может быть где угодно от 2-10, спиливает.
Что касается №3 - убедитесь, что он переносится на ПК, вот стратегия, которую я использую:
Сначала пройдите по встроенному коду и измените любое 'int' или 'unsigned long' на 'int16' или uint32 (или любое другое соглашение по вашему выбору).
Оберните раздел во встроенный заголовок, где вы определяете типы внутри условия:
#ifndef CORE_TYPE_DEFINITIONS
#define CORE_TYPE_DEFINITIONS
typedef long int16;
/*...*/
#endif
создайте файл «PC_Types.h», который определяет те же типы для ПК.
#ifdef CORE_TYPE_DEFINITIONS
#error "Core Types already defined"
#else
#define CORE_TYPE_DEFINITIONS
typedef short int16;
/*...*/
#endif
В проекте для ПК создайте оболочку для каждого встроенного файла c, которая содержит следующее:
#include "PC_Types.h"
#include "ModuleX.c" //the file under test
#include "TestHarness.h" //verification functions
int TestModuleXUnit1(void)
{
/* setup */
/* call Unit1(); */
/* verify post-conditions */
return result;
}
Обертывая каждый файл, вы получаете все связанные функции, доступные по мере необходимости. # включение исходного файла исходного кода в файл оболочки позволяет добавлять обновления встроенного кода непосредственно из системы управления версиями без каких-либо изменений. Добавление тестовых функций после включенного источника дает тестовый код полный доступ ко всем функциям модуля, даже если у них нет общедоступного заголовка.
Я бы начал с перечитывания Майкла Фезерса «Эффективная работа с устаревшим кодом» .