Proper way to return mocked object using pytest.fixture

I would recommend to use pytest-mock. So full example of one file (test_file.py) solution using this library would be:

import os
import pytest
from unittest.mock import patch

class Worker:
    def work_on(self):
        path = os.getcwd()
        print(f'Working on {path}')
        return path

@pytest.fixture()
def mocked_worker(mocker):  # mocker is pytest-mock fixture
    mocker.patch('test_file.os.getcwd', return_value="Testing")

def test_work_on(mocked_worker):
    worker = Worker()  # here we create instance of Worker, not mock itself!!
    ans = worker.work_on()
    assert ans == "Testing"

used libraries for reference:

pytest==5.3.0
pytest-mock==1.12.1


The problem is that when the worker returns the scope of "with" statement ends making the object take its real value, the solution is to use "yield".

@pytest.fixture()
def mocked_worker():
    with patch('test.test_module.os.getcwd', return_value="Testing"):
        result = Worker()
        yield result