首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django的测试中连接mock和client

在django的测试中连接mock和client
EN

Stack Overflow用户
提问于 2011-11-15 05:21:14
回答 2查看 820关注 0票数 0

我已经编写了两个类: System和Order,它们表示类似于“在线售票商店”的东西。

下单很简单:

代码语言:javascript
复制
order = Order('title', set(['1', '2', '5']))
System.fill(order)

但我想测试一下我的views.fill_order函数,并检查它是否正确地填写了来自POST参数的订单。为此,我可以使用mock和client,如下所示:

代码语言:javascript
复制
from core.order import Order
from core.system import System
from django.test.client import Client
from mock import Mock, sentinel

self.logged_client = Client()
# skipping logging process

Order = Mock(sentinel.return_value)
System = Mock()
System.fill = Mock()

# sending hypotetic POST
self.logged_client.post('/my_view_url/', {'title': self.PHANTOM, 'seat_numbers': '1I', 'seat_numbers': '3IV'})

System.fill.assert_called_with(Order.return_value)
Order.assert_called_with(self.PHANTOM, set(['1I', '2II', '3IV']))

但是..。它不工作(断言失败)。如何修复它?

我知道这是因为在我的views.fill_order函数中我这样做:

代码语言:javascript
复制
from core.system import System
from core.order import Order

再说一次,但是如何在测试过程中强制这些类被持续地模拟呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-15 05:59:36

成功模拟的关键是记住,您需要替换模块中实际使用的对象,而不是定义测试的位置。因此,在您的示例中,您希望导入视图模块并替换其中的类:

代码语言:javascript
复制
from core.whatever import views
views.System = my_mock_system
views.Order = my_mock_order
票数 2
EN

Stack Overflow用户

发布于 2013-05-15 19:28:13

当模拟和使用客户端时,它不起作用,因为它似乎正在启动一个不同的项目实例,没有模拟的类。我在这方面没有成功,唯一的方法似乎是实例化类本身……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8128272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档