В порядке ли Google Test для тестирования кода C? - PullRequest
59 голосов
/ 17 марта 2011

Так что я стал любить и получать удовольствие от использования Google Test для проекта C ++, в котором я участвую. Я просто поднимаю новый проект, который будет прямым C (библиотека) и до сих пор не вижулюбая причина, почему бы не продолжать использовать Google Test, даже если это фреймворк C ++.Наличие компилятора C ++ не будет проблемой.

Существуют ли конкретные причины, по которым мне не следует использовать Google Test для тестирования простого кода C?

Спасибо.

Ответы [ 5 ]

55 голосов
/ 02 июня 2011

Довольно часто тестировать код C с использованием сред тестирования C ++, даже ведущая книга по теме следует этому подходу.В прошлом я широко использовал googletest для модульного тестирования кода C и могу рекомендовать его.

Я написал об этом в блоге сообщение, которое может быть полезным: http://meekrosoft.wordpress.com/2009/11/09/unit-testing-c-code-with-the-googletest-framework/

13 голосов
/ 17 марта 2011

Как и весь код Google C ++, Google Test не использует исключения, поэтому поток безопасности исключений не будет проблемой. Пока ваши заголовки совместимы с C ++ (без использования ключевых слов C ++, символов экспорта с правильной связью), все должно быть в порядке.

4 голосов
/ 24 августа 2017

Я просто подумал добавить еще один момент: поскольку gtest - это C ++, вы будете анализировать ваши C заголовки, которые тестируются, как C ++.Это означает, что тесты не гарантируют, что заголовки потребляются из C. Я недавно столкнулся с этим с библиотекой C, которую я строю.

4 голосов
/ 23 апреля 2014

Джейсон, знать об этом !!! : D

Как сказал Meekrosoft, да, это возможно. Я также использовал его сайт, когда пытался это сделать. Это работает, но есть одна большая проблема:

GTest - это инструмент, ориентированный на возражения, а язык C - нет!

Например, в GTest у вас есть много функций (80% всего API), которые запрашивают объект в качестве параметра, например:

EXPECT_CALL(turtle, PenDown())              // turtle is object(class) and PenDown() is method of that object
      .Times(AtLeast(1));

с сайта GTest https://code.google.com/p/googlemock/wiki/ForDummies так что вы будете использовать только макросы, такие как Ожидаемые, ожидаемые, ожидаемые и т. д. ...

Я хотел бы предложить вам инструмент CMocka (или некоторые другие инструменты для модульного тестирования Си). Он также от Google (изменен группой разработчиков не из Google) и создан непосредственно для языка Си. Я использую этот, когда я хочу проверить исходный код типа C.

Надеюсь, это поможет .. :-) Хорошего дня ..: -)

3 голосов
/ 17 марта 2011

Я не мог назвать ни одного. Я думаю, что будут некоторые вещи, которых у вас нет в "нормальном" C. Например, я думаю, что TestCase являются производными от определенного класса. Но в рамках теста вы можете протестировать все что угодно, и почему бы не C?

...