Как проверить статическую функцию - PullRequest
37 голосов
/ 27 февраля 2009

При применении модульного теста к некоторому коду C мы сталкиваемся с проблемой, что некоторая статическая функция не может быть вызвана в тестовом файле без изменения исходного кода. Есть ли простой или разумный способ преодолеть эту проблему?

Ответы [ 12 ]

0 голосов
/ 19 января 2018

Просто добавьте к принятому ответу Джонатана Леффлера и уточните упоминание других функций обертки:

  1. Создайте исходный файл теста, как в test_wrapper_foo.c, где foo.c - оригинал.
  2. В test_wrapper_foo.c:
#include "foo.c"   

// Prototype
int test_wrapper_foo();

// wrapper function
int test_wrapper_foo() {
    // static function to test
    return foo();
}

Предполагается, что статическая функция foo в foo.c имеет прототип: int foo (void);

  1. сборка test_wrapper_foo.c через ваш make-файл вместо foo.c (обратите внимание, что это не нарушит никаких зависимостей от функций в foo.c от других внешних функций)

  2. В вашем скрипте модульного теста вызовите test_wrapper_foo () вместо foo ().

Этот подход оставляет исходный источник без изменений, предоставляя вам доступ к функции из вашей тестовой среды.

0 голосов
/ 16 августа 2015

Есть 2 способа сделать это.

  1. Включите исходный файл c в исходный файл модульного тестирования, чтобы статический метод теперь входил в область исходного файла модульного тестирования и вызывался.

  2. Сделай трюк:

#define static

в заголовке исходного файла модульного тестирования.

Он преобразует ключевое слово static в "ничего" или, я могу сказать, удаляет static из вашего исходного кода c.

В некоторых инструментах модульного тестирования мы можем использовать опцию конфигурации «препроцессор», чтобы сделать этот трюк, просто добавив в конфигурацию:

static=

Инструмент преобразует все ключевые слова static в "ничто"

Но я должен сказать, что, используя эти способы, метод static (или переменная) теряет свое конкретное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...