В нашей среде мы сталкиваемся с проблемой, связанной с функциями имитации для наших библиотечных модульных тестов. Дело в том, что вместо насмешек над целыми модулями (. c файлами) мы хотели бы имитировать отдельные функции.
Библиотека скомпилирована в архивный файл и статически связана с модульным тестом. Без насмешек нет никаких проблем.
Теперь при попытке макетировать отдельные функции библиотеки мы, очевидно, получим несколько определений.
Мой подход теперь заключается в использовании атрибута функции weak
при компиляции / компоновке библиотеки, чтобы компоновщик принимает фиктивную (неслабую) функцию при связывании с модульным тестом. Я уже проверил его, и он, кажется, работает как ожидалось.
Недостатком этого является то, что нам нужно много объявлений атрибутов в коде.
Мой последний подход заключается в передаче некоторых скомпилируйте или свяжите аргументы с компилятором, чтобы каждая функция автоматически объявлялась как слабый символ.
Теперь возникает вопрос: есть ли что-нибудь, что может сделать это хорошим способом?
Кстати: мы используем Clang 8 в качестве компилятора.