Как игнорировать некоторые модули Python при импорте? - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь выполнить модульные тесты с использованием Pytest для некоторого моего кода. Тесты выполняются в отдельной среде Conda на Docker. Я хотел бы протестировать некоторые функции моего кода, но не могу установить все модули моего кода из-за сложности установки некоторых из этих модулей и времени, которое потребуется для запуска.

Как я могу импортировать только определенные модули из файла, без необходимости установки других модулей?

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

Ниже приведен макет моей файловой системы:

test_file.py

from other_file import afunction

def this_test():
    assert afunction(2, 2) == 4

other_file.py

import math
import large_program

def afunction(x,y):
    return math.pow(x, y)

def anotherfunc():
    return large_program()

Если я запустлю Pytest, я получу:

 E   ImportError: No module named 'large_program'

1 Ответ

0 голосов
/ 28 августа 2018

Проще говоря: извлеките функции, которые не зависят от large_program, в другой модуль и протестируйте только этот модуль. Обратите внимание, что вы можете сделать это, не нарушая код клиента (код зависит от вашего other_file модуля), импортировав соответствующие имена в other_file:

# utils.py
import math

def afunction(x,y):
    return math.pow(x, y)

тогда

# other_file.py
import large_program

# this will allow client code to access `afunction` from `other_file`
from utils import afunction

def anotherfunc():
    return large_program()

и наконец:

# test_file.py

# here we import from utils so we don't depend on `large_program`
from utils import afunction

def this_test():
    assert afunction(2, 2) == 4
...