Тестирование библиотеки C ++ с Python - PullRequest
3 голосов
/ 10 июня 2011

У меня есть библиотека libfoo.so, построенная из кода C ++ (скомпилированного с gcc), и я хотел бы быстро протестировать некоторые из его экспортируемых классов (в основном, создание экземпляра класса, а затем вызов его методов для проверки выходных данных).

Хотя я мог бы сделать это на C / C ++ с помощью основного файла, который ссылается на данную библиотеку и собирать мои тесты, но я думаю, что было бы намного проще, если бы можно было просто вызывать Python из командной строки ивызовите методы оттуда.

Я знаю, что могу использовать CDLL из ctypes для загрузки библиотек стиля C, но есть ли подобная функциональность для библиотек и объектов C ++?

РЕДАКТИРОВАТЬ: В идеале, яне хочу изменять код C ++, мне нужно использовать его как есть.

Ответы [ 2 ]

8 голосов
/ 10 июня 2011

Честно говоря, C ++ немного грязный.Вы можете сделать что-то вроде создания чистой C-функции, которая обернет функциональность C ++ (которую вы затем вызываете из python), но в этот момент вы также можете написать свои тесты на C ++.К сожалению, единственный инструмент для этого (который я знаю) - это SWIG.

Печально, что он называется «упрощенной» оболочкой и генератором интерфейса, потому что в этом нет ничего простого.Если в ваших подписях есть ОЧЕНЬ примитивные типы данных (например, JUST, или, возможно, char *), это будет довольно быстрая работа.В противном случае вы должны сказать Swig, как распределить ваши типы данных между языками, и это очень уродливо очень быстро.Более того, через короткое время вы понимаете, что должны изучить API CPython, чтобы написать свой код сортировки.

И к этому моменту вы также можете написать свою собственную оболочку CPython без использования SWIG.Вы внезапно понимаете, что потратили хороший месяц на изучение нового API и чувствуете ужасное разочарование.Если вы собираетесь делать это много, это определенно стоит вашего времени.Однако, если это разовая вещь, просто напишите свои тесты на C / C ++.

(я говорю по опыту здесь)

2 голосов
/ 10 июня 2011

Я согласен с ответом Криса.Однако хочу отметить, что Cython поддерживает C ++ (с некоторыми ограничениями).

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