Путь не может содержать косую черту - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь сделать модульное тестирование в 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
...

Но это не модуль, это простой каталог.

У вас есть решение?

Привет.

1 Ответ

0 голосов
/ 08 ноября 2018

Подкаталоги по-прежнему считаются пакетами в Python, и поэтому вам по-прежнему нужно использовать точки. Как в src.sum.

...