Mocking-атрибут класса, который используется в тестируемом классе
Я пытаюсь написать модульные тесты для моего приложения django, но не могу правильно использовать mock.patch.
мой код :
apps\MyApp\DataAccessLayer\CctDAO.py :
from ..models import CCT
from ..serializers import CctSerializer
"""
get a list of all CCTs
@return a list of all the CCTs
"""
def getAll() -> list[dict]:
entities = CCT.objects.all()
serializer = CctSerializer(entities, many=True)
return serializer.data
apps\Myapp\serializers.py :
from rest_framework_mongoengine.serializers import DocumentSerializer
from .models import CCT
"""
serializer to encode and decod CCT to JSON
"""
class CctSerializer(DocumentSerializer):
class Meta:
model = CCT
exclude = ('id', ) #using custom id field instead of the default
мой тестовый пример :
from unittest import TestCase, mock
from .DataAccessLayer import CctDAO
class Test_CCT_DAO(TestCase) :
# @mock.patch('apps.MyApp.DataAccessLayer.CctDAO.CCT.objects.all', return_value=['mocked-data1'])
@mock.patch.object(CctDAO.CctSerializer, 'data', new_callable=mock.PropertyMock, return_value = ['mocked-data1'])
def test_getall_empty(self, mock1=None, mock2=None):
print(CctDAO.getAll())
self.assertEqual(['mocked-data2'], CctDAO.getAll())
В этом тестовом случае CctDAO.getAll()
возвращает []
, а не мои насмешливые данные.
Я также пробовал:
@mock.patch.object(CctDAO, 'CctSerializer.data', new_callable=mock.PropertyMock, return_value = ['mocked-data1'])
Но это приводит к ошибке, что модуль CctDAO не имеет атрибута 'CctSerializer.data'.
Я также пробовал:
@mock.patch('apps.MyApp.DataAccessLayer.CctDAO.CctSerializer.data', new_callable=mock.PropertyMock, return_value=['mocked-data1'])
Который также возвращает []
, а не насмешливые данные.
Как мне правильно установить патч CCT.objects.all()
и serializer.data
?