Загрузка источника скрипта python по имени файла для тестирования - PullRequest
1 голос
/ 10 марта 2020

Я хотел бы создать тест для python 3.7+ сценария с именем foo-bar (это имя файла и оно не имеет .py расширения):

#!/usr/bin/env python

def foo(bar):
  return bar + 42

if __name__ == '__main__':
    print(foo(1))

Как я могу загрузить этот файл по одному пути, чтобы я мог проверить метод foo()? Тест НЕ должен запускать условие if main.

ОБНОВЛЕНИЕ обратите внимание, что речь идет не о executing файле из теста (т.е. exec('foo-bar')), а скорее о загрузке / импорте это как модуль / ресурс, позволяющий тестовому коду выполнить на нем foo().

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Вы можете использовать функции в importlib , чтобы загрузить этот модуль непосредственно из файла сценария, без расширения .py.

Чтобы это работало, вам нужно использовать загрузчик явно, в этом случае SourceFileLoader будет работать.

from importlib.machinery import SourceFileLoader

foo_bar = SourceFileLoader('foo_bar', './foo-bar').load_module()

На этом этапе вы можете использовать функции внутри модуля:

result = foo_bar.foo(1)
assert result == 43
0 голосов
/ 10 марта 2020

Я думаю, что вы можете временно создать копию файла с расширением. py и после импорта удали его

...