Я пишу модульные тесты для своего приложения.
У меня есть модуль в файле Configuration/connections.py с конфигурацией (обычно определяемой переменными среды):
Код: Выделить всё
from typing import Literal
from pydantic_settings import BaseSettings
class StorageConfig(BaseSettings):
storage_name: Literal["file", "s3"]
Код: Выделить всё
import fsspec
from configuration.connections import StorageConfig
storage_config = StorageConfig()
fs: fsspec.AbstractFileSystem = fsspec.filesystem(storage_config.storage_name)
Код: Выделить всё
import pytest
from pydantic import BaseModel
@pytest.fixture(autouse=True)
def local_config(mocker):
class LocalStorageConfig(BaseModel):
storage_name: str = "file"
mocker.patch("configuration.connections.StorageConfig", new=LocalStorageConfig)
В зависимости от архитектуры моей папки макет работает, а иногда и нет.
- Если у меня есть Connections.storage как пакет пространства имен, и мой тест находится в Connections/storage/tests/test_storage.py, и я исправляю непосредственно Configuration.connections. StorageConfig (в отличие от того, что документация требует от меня), все работает нормально.
- Если Connections.storage — обычный пакет, и все остальное, как в 1., больше не работает
- Если я перенесу свой тест в test/integration/test_storage.py и оставьте все остальное, как в пункте 2., это работает.
- Почему обычный пакет и пакет пространства имен оказывают влияние на макете?
- Почему положение моего тестового файла влияет на макет?
- Почему он не работает, когда я исправляю Connections.storage .main.StorageConfig, как следует из документации?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -regular-p