Using mocks
Mock object
Mock objects are simulated objects that mimic the behavior of real objects in controlled ways, most often as part of a software testing initiative. A programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts.
How to apply a automatic mock
The most easier way to create a mock
The decorator @patch.object is the best option to implement a mock
This is the code to test
# utils.py
from .actions import shoot_gun, kenny_s_birth, show
def kenny_killer(kenny_id: int) -> None:
    # get the current kenny
    kenny = Kenny.objects.filter(id=kenny_id).first()
    # see - South Park - Coon and friends
    if kenny:
        shoot_gun(kenny)
        kenny_number = kenny_s_birth()
        show(kenny_number)
This is a example of use of mocks
from unittest.mock import MagicMock, call, patch
from rest_framework.test import APITestCase
from .models import Kenny
from .utils import kenny_killer
import app.actions as actions
# this is a wrapper that implement the kenny_s_birth static behavior to the test
def kenny_s_birth_mock(number: int):
    def kenny_s_birth():
        return number
    # the side_effect is a function that manage the behavior of the mocked function
    return MagicMock(side_effect=kenny_s_birth)
class KennyTestSuite(APITestCase):
    # 🔽 this function is automatically mocked
    @patch.object(actions, 'shoot_gun', MagicMock())
    # 🔽 this function is manually mocked
    @patch.object(actions, 'kenny_s_birth', kenny_s_birth_mock(1000))
    # 🔽 this function is automatically mocked
    @patch.object(actions, 'show', MagicMock())
    def test_kill_kenny(self):
        kenny = Kenny()
        kenny.save()
        kenny_killer(kenny_id=1)
        # shoot_gun() is called with a kenny instance
        self.assertEqual(actions.shoot_gun.call_args_list, [call(kenny)])
        # kenny_s_birth() is called with zero arguments
        self.assertEqual(actions.kenny_s_birth.call_args_list, [call()])
        # show is called
        self.assertEqual(actions.show.call_args_list, [call(1)])