Fixture
Test fixture is like Depndency Injection for pytest
. It will be recall each time you use it
For example considering this situation
from src.services.MyService import MyService
from src.services.Database import Database
class TestMyService:
def setup_method(self, method):
self.app = MyService(Database())
def teardown_method(self, method):
del self.app
def test_load_user_should_success(self):
self.app.load_user
The Database
could be dependency injected. To do that we create a fixture.
Fixture way it will be like this
from src.services.MyService import MyService
from src.services.Database import Database
import pytest
@pytest.fixture
def database():
return Database()
@pytest.fixture
def app(database):
return MyService(database)
class TestMyService:
def test_load_user_should_success(self, app):
actual = app.load_user("Austin")
assert actual is True
def test_load_user_should_success_2(self, app):
actual = app.load_user("Austin")
assert actual is True
In this case, app
fixture will be called twice.
If you want these fixtures to be available for other files, consider Conftest