Реализация модульных тестов для расширения Python C - PullRequest
0 голосов
/ 30 сентября 2019

Итак, у меня есть репозиторий для сборки расширения Python C, изложенный следующим образом:

setup.py
demo.c
MANIFEST.in

Содержимое файла C:

#include <Python.h>

static PyObject* print_message(PyObject* self, PyObject* args)
{
    const char* str_arg;
    if(!PyArg_ParseTuple(args, "s", &str_arg)) {
        puts("Could not parse the python arg!");
        return NULL;
    }
#ifdef USE_PRINTER
    printf("printer %s\n", str_arg);
#else
    printf("msg %s\n", str_arg);
#endif
    // This can also be done with Py_RETURN_NONE
    Py_INCREF(Py_None);
    return Py_None;
}

static PyMethodDef myMethods[] = {
    { "print_message", print_message, METH_VARARGS, "Prints a called string" },
    { NULL, NULL, 0, NULL }
};

// Our Module Definition struct
static struct PyModuleDef myModule = {
    PyModuleDef_HEAD_INIT,
    "DemoPackage",
    "A demo module for python c extensions",
    -1,
    myMethods
};

// Initializes our module using our above struct
PyMODINIT_FUNC PyInit_DemoPackage(void)
{
    return PyModule_Create(&myModule);
}

В моем setup.py У меня есть следующий код:

from distutils.core import setup, Extension

module1 = Extension('DemoPackage',
                    define_macros = [('USE_PRINTER', '1')],
                    include_dirs = ['include'],
                    sources = ['src/demo.c'])

setup (name = 'DemoPackage',
       version = '1.0',
       description = 'This is a demo package',
       author = '<first> <last>',
       author_email = 'person@site.com',
       url = 'https://docs.python.org/extending/building',
       long_description = open('README.md').read(),
       ext_modules = [module1])

Мой вопрос здесь заключается в том, могу ли я собрать и установить пакет с помощью команд:

$ python setup.py build $ python setup. py install

Как включить или написать модульный тест в сценарии расширения C? Я ищу модульный тест для запуска вместе с setup.py, аналогично тому, как тест будет работать для cmake.

...