Python 模拟对象在Django unittests中获取

Python 模拟对象在Django unittests中获取,python,django,unit-testing,mocking,django-testing,Python,Django,Unit Testing,Mocking,Django Testing,编辑:这最初不起作用,因为导入使用了不同的导入到视图和模拟中。我在模拟测试中使用了project.app.views.Model,而在导入中views.py实际上是app.views.Model 因此,这个问题实际上得到了解决,但这个问题可能对其他人有用,因为它突出了在模拟中保持导入一致性的必要性。(迈克尔·福德(模拟创造者)在他的作品中提到了这一点) 这个问题围绕着模拟Django模型管理器返回factory_boy对象的方法,从而避免数据库。我有一个“目的地”模型: class Destin

编辑:这最初不起作用,因为导入使用了不同的导入到视图和模拟中。我在模拟测试中使用了
project.app.views.Model
,而在导入中
views.py
实际上是
app.views.Model

因此,这个问题实际上得到了解决,但这个问题可能对其他人有用,因为它突出了在模拟中保持导入一致性的必要性。(迈克尔·福德(模拟创造者)在他的作品中提到了这一点)

这个问题围绕着模拟Django模型管理器返回factory_boy对象的方法,从而避免数据库。我有一个“目的地”模型:

class Destination(models.Model):
    name = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
以及基于DestinationView类的视图。其中,我尝试使用url为目标提供的名称检索数据库对象:

from app.models import Destination

class DestinationView(View):

    def get(self, request, **kwargs):

        [snip - gets the name from the URL request]

        try:
            destination = Destination.objects.get(name=name)
        except:
            return HttpResponse('No such destination', status=400)
现在,我想模拟上面的单元测试。我使用unittests的实例将它们从数据库中取出,并试图在调用when
get
时将其中一个交回:

def test_mocked_destination(self):
    with patch('app.views.Destination') as mock_destination:
        rf = RequestFactory()
        mock_destination.objects.get.return_value = DestinationFactory.build()
        request = rf.get('/destination/', {'destination': 'London'})
        response = DestinationView.as_view()(request)

然而,这并没有按计划进行,因为假的模拟似乎从未被调用。如何正确覆盖
Destination
对象的
get()
return\u值,以便从数据库模拟整个视图?

为什么要模拟“views.Destination”,是模拟导入的名称还是在
views
文件中声明模型?@gatto-bingo。你刚刚强调了我弄错的问题。请参见编辑。谢谢你的回答!