0

私は2つのモジュールを持っています。

a.py

def get_resource(arg1, arg2):
   return Modelobject based on arg1 and arg2 or None

b.py (フォーム)

from a import get_resource
class A(forms.Form):
 arg1 = forms.CharField()
 arg2 = forms.CharField()
 def clean(self):
   res = get_resource(arg1, arg2)
   if res is None:
    validationerror
   else:
    cleaned_data.update(res_key=res)

データベースが不要になるように get_resource 部分をモックする必要がありますが、動作させることができませんでした。

これが私が試したものですが、うまくいきません。私は何を間違っていますか?

class Test(TestCase):
  def test_form_a(self):
    with patch('b.get_resource') as mock_tool:
      mock_tool.return_value = MagicMock(spec=MusicModel)
      form_data = {'arg1': '1', 'arg2': 'Music'}
      form = A(data=form_data)

また、関数で side_effects を試しました

def my_side_effect(*args, **kwargs):
  return value based on arg[0] and arg[1]

mock_tool.side_effect = my_side_effect

私はモックとテストの初心者なので、誰かが私に正しい方向性を示してもらえますか?

4

2 に答える 2

0

更新: 問題が何であるかがわかったと思います。なぜこれが起こるのか理解するのに苦労していますが、それはすべてインポートに依存しています。どうやら、フォーム クラスをパッチ内にインポートし、フォームをインスタンス化した後に戻り値を定義する必要があるようです。

class Test(TestCase):
  def test_form_a(self):
    with patch('b.get_resource') as mock_tool:
      from b import A
      form_data = {'arg1': '1', 'arg2': 'Music'}
      form = A(data=form_data)
      mock_tool.return_value = MagicMock(spec=MusicModel)

モジュールのロードが原因だと思います。

于 2013-09-01T04:46:48.300 に答える