2011-11-14 6 views
0

私は2つのクラスを書いています。システムと注文は "オンラインチケット配布ストア"のようなものです。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

をモックとクライアントを使用するときに動作していません嘲笑されたクラス。 私はそれをやっても成功しませんでした。唯一の方法はクラス自体をインスタンス化するようです...

関連する問題