This plugin provides pytest fixtures to create an in-memory DB instance on tests and dump your raw test data.
pip install pytest-sqlalchemy-mock
Let's assume you have a SQLAlchemy declarative base and some models with it.
models.py
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String)
Firstly SQLAlchemy base class which is used for declare models should be passed with sqlalchemy_declarative_base
fixture in conftest.py
conftest.py
@pytest.fixture(scope="function")
def sqlalchemy_declarative_base():
return Base
Then in test functions you can use mocked_session
fixture to make query in mocked DB.
test_user_table.py
def test_mocked_session_user_table(mocked_session):
user_data = mocked_session.execute("SELECT * from user;").all()
assert user_data == []
Also, you can dump your mock data to DB before start testing via sqlalchemy_mock_config
fixture like following.
conftest.py
@pytest.fixture(scope="function")
def sqlalchemy_mock_config():
return [("user", [
{
"id": 1,
"name": "Kevin"
},
{
"id": 2,
"name": "Dwight"
}
])]
test_user_table.py
def test_mocked_session_user_class(mocked_session):
user = mocked_session.query(User).filter_by(id=2).first()
assert user.name == "Dwight"
- Mock with decorator for specific DB states for specific cases.
- Support to load data from
.json
and.csv
- Async SQLAlchemy support