ValueError: пустое имя модуля при попытке имитировать с помощью unittest и pytestPython

Программы на Python
Ответить
Anonymous
 ValueError: пустое имя модуля при попытке имитировать с помощью unittest и pytest

Сообщение Anonymous »

Я пытаюсь имитировать функцию, импортированную модулем, который я пытаюсь протестировать с помощью pytest.
Структура каталогов:

Код: Выделить всё

root/
├── subdir/
│   ├── mod.py
│   ├── other_mod.py
│   ├── __init__.py
|   └── __tests__/
│       ├── test_mod.py
│       ├── __init__.py
├── __init__.py
└── app.py
Содержимое файла:

Код: Выделить всё

#all __init__.py files are empty

#app.py
from subdir import mod
mod.function()

#subdir/mod.py
from .other_mod import other_function
def function():
return other_function()

#subdir/other_mod.py
def other_function():
return False

#subdir/__tests__/test_mod.py
from .. import mod
from unittest.mock import patch
def test_mod():
with patch('subdir.other_mod.other_function') as mock_other_function:
mock_other_function.return_value = True
assert mod.function()
От root/ я запускаю pytest следующим образом:

Код: Выделить всё

$pytest subdir/__tests__/test_mod.py
Это приводит к ошибке:

Код: Выделить всё

FAILED subdir/__tests__/test_mod.py::test_mod - ValueError: Empty module name
Я обрезал вывод, но это единственная ошибка. Правильным поведением будет прохождение теста.
Я изменил то, как я ссылаюсь наother_mod в вызове patch(), сделав его относительно разных мест, например тестового файла. или файл mod.py, но это приводит либо к той же ошибке, либо к ошибке «модуль не найден». Я также пробовал добавлять переменные name в различные файлы, но это не меняет проблему.
Что мне здесь не хватает? Как unittest хочет, чтобы я ссылался на модуль?

Подробнее здесь: https://stackoverflow.com/questions/791 ... and-pytest
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»