pytest-mock-resources create_mongo_fixture

x·2023년 5월 16일
0

pytest

목록 보기
1/4

환경에 따라 mongo client 인스턴스를 만들어 사용하려고 함
테스트 코드 상에서 의존성 주입을 하려고 했는데 pytest는 테스트 클래스에 __init__ 메서드를 만들 수 없었음. 다른 메서드에 def a(b: B): 이렇게 의존성 주입을 하려고 하니까 에러남.
결국 테스트 메서드에서 의존성 주입은 일단 포기함.

create_x_fixture로 픽스쳐 생성 시 전역 변수에 할당해주지 않고 쓰면 FixtureFunction 타입이기 때문에 function 이 반환됨. 전역 변수에 할당 후 테스트 메서드에 인수로 넘겨줘야 정상적으로 쓸 수 있음. get_mongo_client 메서드에 fixture 데코레이터를 달고 테스트 메서드 인수로 넘기면 안됨.

응답 인스턴스는 Database(MongoClient(host... 이런식으로 나와야 함

mongo_db.py

class MongoDB:
    def __init__(self) -> None:
        if os.environ.get("FLASK_ENV") == "test":
            self.mongo_client = create_mongo_fixture(scope="session")

test_xx.py

from app.database.mongo import MongoDB

def get_mongo_client():
    mongo_db = MongoDB()
    _mongo_client = mongo_db.mongo_client
    print(f'get_mongo_client {_mongo_client}')
    return _mongo_client

_mongo_client = get_mongo_client()

def test_update_calculated_fee_table(app, _mongo_client):
    some_class(mongo=_mongo_client)
    assert 1==1

0개의 댓글