Djangos model.Manager()
sınıfında zincirleme çağrısı alamaya çalışıyorum. Şimdilik values()
ve filter()
yöntemini kullanmak istiyorum. Django ORM - alay değerleri(). Filter() zinciri
- bir sanal ortam
- Run
pip install django mock mock-django nose django-nose
- bir uygulama oluşturun
manage.py startapp mockme
- ekle bir proje
django-admin.py startproject mocktest
- oluştur
django_nose
vemocktest.mockme
INSTALLED_APPS
(ayarlar.py) TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
her şeyin VERFIY için settings.py ekle kurulumunun doğru ben manage.py test
koştum. Bir test çalıştırılır, bir uygulama oluşturduğunuzda standart test Django oluşturulur.
Yaptığım sonraki şey çok basit bir model oluşturmaktı.
mockme/models.py yaptım
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=50)
sonraki şey MyModel
kullanan basit bir fonksiyon yaratmaktı. Daha sonra test etmek istediğim fonksiyon bu.
mockme/functions.py özel
from models import MyModel
def chained_query():
return MyModel.objects.values('name').filter(name='Frank')
Hiçbir şey burada oluyor. İşlev, name='Frank'
'un bulunduğu tüm örnekleri bulmak için MyModel nesnelerini filtreliyor. Değerler() çağrısı, yalnızca bulunan tüm MyModel örneklerinin ad alanını içerecek olan bir ValuesQuerySet
döndürecektir.
mockme/tests.py
import mock
from django.test import TestCase
from mocktest.mockme.models import MyModel
from mocktest.mockme.functions import chained_query
from mock_django.query import QuerySetMock
class SimpleTest(TestCase):
def test_chained_query(self):
# without mocked queryset the result should be 0
result = chained_query()
self.assertEquals(result.count(), 0)
# now try to mock values().filter() and reeturn
# one 'Frank'.
qsm = QuerySetMock(MyModel, MyModel(name='Frank'))
with mock.patch('django.db.models.Manager.filter', qsm):
result = chained_query()
self.assertEquals(result.count(), 1)
ilk assertEquals olarak başarılı değerlendirecektir. Model Yöneticisi henüz alamadığı için hiçbir örnek iade edilmiyor. Ben son değerlendirilecek edeceğiz bulundu beri
qsm = QuerySetMock(MyModel, MyModel(name='Frank'))
Ben filter()
yöntemi olup values()
yöntem alay: İkinci assertEquals Ben QuerySetMock dönüş değeri olarak eklenen MyModel örneğini içermek üzere result
bekliyoruz çağrıldığında arama, emin değilim.
İkinci sonuç değişkeni herhangi bir MyModel örneği içermediği için test başarısız olur.
from django.db import models
print models.Manager.filter
döndü: Neyi yanlış yapıyorum
<SharedMock name='mock.iterator' id='4514208912'>
filter()
yöntem gerçekten bir "ayıklama print" ifadesi eklendi alay emin olmak için mi?
o ' 'değerler')' olması gerekmez mi? – Splatmistro