Существует ли среда модульного тестирования для «простого C», которую можно легко интегрировать с обозревателем тестов Visual Studio?
Так как я хотел бы ввести модульное тестирование в нашу команду встроенных программ и встроенных программ таким же образом, как мы это делаем для приложений .NET, моей главной заботой является удобство для пользователя , т. е. должно быть просто написать тест и получить зеленый свет внутри. проводник тестов.
Я знаю о Microsoft Unit Testing Framework для C++ , но, поскольку у команды нет опыта работы с C++, я не уверен, что все пройдет гладко. По словам автора Criterion в этой ветке HN :
Поскольку C не был подмножеством C++ со времен C99, существует множество случаев, когда попытка сделать C в C++ неудобна или просто невозможна со стандартным C++:
Во-первых, вам нужно было бы обернуть включения заголовков,
extern "C"
чтобы отключить искажение, затем вам нужно было бы убедиться, что вы static_cast все ваши указатели, где обычноvoid*
преобразования выполняли бы свою работу.Кроме того, все интерфейсы, основанные на назначенных инициализаторах и составных литералах, не работают, если вы не решите компилировать в нестандартном GNU C++.
И есть еще несовместимости, такие как использование
static
илиconst
в объявлениях параметров массива или использование VLA в макросах, которые не распознаются C++.
Вторая проблема связана с интеграцией с нашим CI-сервером (Bamboo), но я не ожидаю никаких проблем, когда он заработает.
Тест Google вырос из проекта модульного тестирования Cmockery C, который Google открыл и забросил, и который теперь живет как Cmocka .
Могу смело рекомендовать из личного опыта. Однако я использовал его только из Eclipse, а не из MSVC, поэтому ничего не могу гарантировать.
Насколько я знаю, MSVC позволит вам выбрать набор инструментов, поэтому вы будете использовать его только для графического интерфейса; таким образом, не должно быть никаких проблем, если вы используете компилятор C99.
Я не знаю, поместится ли он в обозревателе тестов, но, вероятно, это будет не вопрос C/C++, а скорее вопрос о том, может ли обозреватель тестов анализировать выходные данные данного журнала модульных тестов.
cmocka поддерживает несколько различных форматов вывода сообщений, таких как Test Anything Protocol, Subunit, xUnit XML или исходный формат вывода cmockery.
Итак, у вас есть хорошие шансы. В частности, я ожидаю, что проводник TGE будет поддерживать формат xUnit.
Я бы посоветовал потратить несколько часов на простой тест «привет, мир».
Мы начали проводить некоторые тесты с помощью Google Test (который включает в себя Google Mock), чтобы понять, какие проблемы возникнут на практике. Это по-прежнему среда тестирования C++, поэтому проблемы из моего вопроса все еще актуальны, но ее было легко интегрировать, поэтому нам просто нужно было попробовать:
(обновление 2017 г.)
Просто для обновления: в конце концов мы продолжили использовать Google Test, поскольку расширение Visual Studio работает нормально, и было быстрее просто использовать extern "C"
компоновку, а не использовать какую-либо другую среду тестирования C, которая потребовала бы от нас написания расширения для VS.
Тем не менее, мы решили использовать hippomocks для имитации, так как это единственная структура для имитации заголовков, которая имитирует функции C и работает с компилятором MSVC. Люди, использующие GCC, могут использовать CMocka, но он не работает с MSVC (но опять же, «люди GCC», вероятно, в первую очередь не будут использовать Visual Studio).
Гру
Мог говорит восстановить Монику
Гру
extern "C"
блоков, чтобы получить связь C, но кроме этого у нас не было никаких серьезных проблем. Тем не менее, вы ответили на вопрос, поэтому я приму его.Мог говорит восстановить Монику
cmocka
. Вы только что притворились, что ваши функции и структуры C, которые нужно имитировать, были классами C++?Гру
--wrap
слабое связывание, такое как GCC (которое, я считаю, необходимо для cmocka), мы использовали HippoMocks для имитации и GoogleTest для тестирования. HippoMocks переписывает таблицу переходов функций, чтобы имитировать функции, это единственный заголовочный файл, который вам нужно включить, и, похоже, он переносим на разные платформы. Критерий, похоже, работает так же). Таким образом, мы просто используем gtest для тестов, а затем имитируем, когда это необходимо, используя HippoMocks, и получаем полную поддержку VS Test Explorer, можем отлаживать отдельные тесты и тому подобное.