Я пытаюсь сделать модульное тестирование в C, используя Python и модуль CFFI. Это в значительной степени работает, но я не могу использовать его в подкаталоге.
Во время тестирования мой проект выглядит так:
$ tree tests
tests/
├── sum.c
├── sum.h
├── tests_units.py
...
$ python3 tests_unit.py
...
OK
Но когда я конвертирую его для своего проекта:
$ tree
.
├── Makefile
├── src
│ ├── sum.c
│ └── sum.h
│ └── ...
└── tests
└── tests_units.py
My make check
выполните следующее:
check:
python3 tests/tests_units.py
И я так адаптирую свой тестовый файл:
import unittest
import cffi
import importlib
def load(filename):
# load source code
source = open(filename + '.c').read()
includes = open(filename + '.h').read()
# pass source code to CFFI
ffibuilder = cffi.FFI()
ffibuilder.cdef(includes)
ffibuilder.set_source(filename + '_', source)
ffibuilder.compile()
# import and return resulting module
module = importlib.import_module(filename + '_')
return module.lib
class SumTest(unittest.TestCase):
def setUp(self):
self.module = load('src/sum')
def test_zero(self):
self.assertEqual(self.module.sum(0), 0)
if __name__ == '__main__':
unittest.main()
Обратите внимание на эту строку:
self.module = load('src/sum')
Так что мой журнал
...
Traceback (most recent call last):
File "tests/tests_units.py", line 28, in setUp
self.module = load('src/sum')
File "tests/tests_units.py", line 17, in load
ffibuilder.set_source(filename + '_', source)
File "/usr/local/lib/python3.6/site-packages/cffi/api.py", line 625, in set_source
raise ValueError("'module_name' must not contain '/': use a dotted "
ValueError: 'module_name' must not contain '/': use a dotted name to make a 'package.module' location
...
Но это не модуль, это простой каталог.
У вас есть решение?
Привет.