2011-11-14 45 views
0

我写了两个类:System和Order,它们代表“在线票务分发存储”之类的东西。在django的测试中连接模拟和客户端

加工顺序很简单:

order = Order('title', set(['1', '2', '5'])) 
System.fill(order) 

但我想测试我的views.fill_order功能,并检查它是否从POST参数正确地填写订单。要做到这一点,我可以使用这样的模拟和客户端:

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函数中我做的:

from core.system import System 
from core.order import Order 

再次,但如何强制这个类测试持续期间被嘲笑?

回答

2

成功嘲讽的关键是记住,您需要替换实际使用的模块中的对象,而不是您定义测试的位置。所以,你的情况,你要导入的视图模块有更换类:

from core.whatever import views 
views.System = my_mock_system 
views.Order = my_mock_order 
1

嘲讽和使用客户端的时候,因为它似乎是推出项目的不同实例,它不工作,不嘲笑的类。 我没有这样做的成功,唯一的办法似乎是例证类本身...