2013-02-11 48 views
1

我想测试惩戒在一个Django应用程序一个装饰

  • 如果意见装饰工作正常
  • 如果正确的观点被称为

所以,这里的装饰get_object,并查看features是在myapp.views

@get_object 
def features(request, object): 
    return {} 

我尝试嘲笑他:

new_view = Mock(__name__='features', return_value={}) 
decorated = get_object(new_view) 

with patch('myapp.views.features') as features: 
    features = decorated 
    client = Client() 
    response = client.get('/features') 
    print new_view.call_args 

这说明不了什么,仿佛模拟对象不叫,但我想它应该是。

我怎样才能正确地嘲笑装饰看法?

回答

1

当你调用patch您尝试使用新MagicMock品牌更换您的看法。既然你手动构建一个模拟你查看你应该更多的像做(未经测试):

new_view = Mock(__name__='features', return_value={}) 
features = get_object(new_view) 

with patch('myapp.views.features', features): 
    client = Client() 
    response = client.get('/features') 
    print new_view.call_args 

这将取代myapp.views.features用手卷起模拟。

虽然在一般我会建议你测试你的装饰孤立而不使用Django的测试客户端。你真的把两个测试混合在一起。首先是确定装饰器是否有责任,另一个是确保请求被正确路由。