장고를 조롱하는 것에 대해 배우고 있지만 패치 할 때 머리가 아프지는 않습니다. 장고의 패치 꾸미기로 모듈을 조롱 할 때 오류가 발생했습니다.
test_get_name 패스
하지만 여기ValueError: Object is of type 'MagicMock', but must be a Django Model, Manager, or QuerySet
와 test_patched_get_name 실패는 내 파일입니다
utils.py
def get_name(clientid):
c = get_object_or_404(Client, pk=clientid)
c_name = c.get_name()
return c_name
tests.py
class ClientTests(unittest.TestCase):
def setUp(self):
self.c_instance = mock.Mock(spec=Client, pk=1)
self.c_instance.name = "Test"
def test_get_name(self):
self.assertEqual(Client.get_name(self.c_instance), "Test")
def test_patched_get_name(self):
with mock.patch('myapp.utils.Client') as self.c_instance:
from myapp.utils import get_name
self.assertEqual(get_name(self.c_instance.pk), "Test")
models.py는
class Client(models.Model):
name = models.CharField(max_length=200)
def get_name(self):
return self.name
나는 get_object_or_404
이 모델보다는 모의 객체를 원하지만 나는이 작업을 수행하는 방법을 잘 모르겠습니다 가정합니다.
전체 역 추적 :
======================================================================
ERROR: test_patched_get_name (myapp.tests.ClientTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "pathto/myapp/tests.py", line 63, in test_patched_get_name
self.assertEqual(get_name(self.c_instance.pk)
File "pathto/myapp/views.py", line 36, in get_name
cu = get_object_or_404(Client, pk=clientid)
File "pathto/lib/python2.7/site-packages/django/shortcuts/__init__.py", line 111, in get_object_or_404
queryset = _get_queryset(klass)
File "pathto/lib/python2.7/site-packages/django/shortcuts/__init__.py", line 97, in _get_queryset
"Manager, or QuerySet" % klass__name)
ValueError: Object is of type 'MagicMock', but must be a Django Model, Manager, or QuerySet
----------------------------------------------------------------------
당신이 전체 역 추적을 제공하십시오 것입니다
나는 테스트는 다음과 같이 보일한다고 생각? – Nilesh추적으로 업데이트했습니다. – greenafrican
'class Client (models.Model) :'이것은'models.Model'에서'Client' 확장을 보여줍니다. 유청이 'MagicMock'을 보여 주나요? – Nilesh