У меня есть груда кода C, который я хотел бы к модульному тесту, пользующемуся unittest библиотекой Python (в Windows), но я пытаюсь разработать лучший способ соединить интерфейсом с кодом C так, чтобы Python мог выполнить его (и вернуть результаты). У кого-либо есть опыт самым легким способом сделать это?
Некоторые идеи включают:
Существует ли канонический способ сделать это? Я собираюсь быть выполнением этого довольно много с различными модулями C, таким образом, я хотел бы найти путь, который является наименьшим количеством усилия.
Я думаю, что точное решение зависит от вашего кода. Не все библиотеки легко можно обернуть в виде DLL. Если да, то ctypes
, безусловно, самый простой способ - просто создайте DLL из своей библиотеки, а затем протестируйте ее с помощью ctypes
. Дополнительным бонусом является то, что теперь у вас есть ваша библиотека, удобно обернутая как отдельная DLL, которая помогает отделить ваше приложение.
Иногда, однако, требуется более тщательное взаимодействие между вашим кодом C и тестируемым кодом Python. Тогда, вероятно, лучше всего подключить его как расширение, для чего SWIG - довольно хороший инструмент, который автоматизирует большинство вещей, которые вам покажутся скучными в процессе.
Использование ctypes было бы моим первым побуждением, хотя я должен признать, что если бы я тестировал код C, который изначально не собирался взаимодействовать с Python, я бы просто использовал check . Проверка имеет сильное преимущество в том, что она может правильно сообщать тестовые случаи, когда происходит ошибка segfault. Это потому, что он запускает каждый тестовый пример в отдельном процессе.
Теперь, если вы все равно собираетесь создать оболочку python для кода C, я бы просто протестировал ее. В дополнение к методам, которые вы перечислили выше, вы также можете использовать Cython для написания такой оболочки с кодом, подобным python, а затем выполнить ее модульное тестирование с Python.