ריבוי client fixtures

אני מסתכל באוסף המרשים של ה client fixtures שיש לנו בקוד ואני תוהה על מהותם. אני מבין שהרוב פשוט העתיקו מה שהם ראו שאחרים עשו, אבל אולי המישהו המקורי יכול להסביר למה כל ראוט צריך אחד משלו?

חלק מהקוד:

def create_test_client(get_db_function) -> Generator[Session, None, None]:
    Base.metadata.create_all(bind=test_engine)
    main.app.dependency_overrides[get_db_function] = get_test_db

    with TestClient(main.app) as client:
        yield client

    main.app.dependency_overrides = {}
    Base.metadata.drop_all(bind=test_engine)


@pytest.fixture(scope="session")
def agenda_test_client() -> Generator[TestClient, None, None]:
    yield from create_test_client(agenda.get_db)


@pytest.fixture(scope="session")
def friendview_test_client() -> Generator[TestClient, None, None]:
    yield from create_test_client(friendview.get_db)


@pytest.fixture(scope="session")
def weight_test_client() -> Generator[TestClient, None, None]:
    yield from create_test_client(weight.get_db)


@pytest.fixture(scope="session")
def event_test_client() -> Generator[TestClient, None, None]:
    yield from create_test_client(event.get_db)

ממבט על הקוד, אפשר לראות שכל הפיקצ’ר-לראוט מעבירים את ה get_db מהמודול שלהם. בלי יוצא מן הכלל, אצל כולם זה

def get_db() -> Session:
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

שנמצא ב app/dependencies.py. אז מה המטרה פה בעצם?

לייק 1

אני לא בטוח כלכך, אבל לפי מה שזכור לי, בהתחלה כשניסיתי להשתמש ב client של מישהו אחר, זה איכשהו הפיל לי חלק מהבדיקות.

הפונקציה create_test_client יוצרת אוברייד ומחליפה את הפונקציה get_db באחת שמביאה. סשן של הדאטהבייס של הבדיקות.
להבנתי התהליך הזה דומה במהותו לפאטצ’ינג של פונקציה ולכן יש להגדיר את הפונקציה המדוייקת שמתחלפת בתוך המודול שנרצה לבדוק ולא הפונקציה המקורית. כלומר: צריך להחליף את event.get_db ולא את dependencies.get_db, אפילו שבפועל זו אותה הפונקציה מיובאת לתוך המודול.
בגלל הצורך בהחלפת הפונקציה מקומית בכל אחד מהמודולים באופן ספציפי, נוצר ריבוי של קליינטים שלמראית עין הוא זהה כמעט לחלוטין.

אם זאת אותה פונקציה בדיוק, אין פה שום שינוי. מה אני מפספס?