このシナリオを立てよう
# This code lives in lolcat-web/lolapps/lolburger/burger.py
import os
from helper.lib import price
def i_haz_cheezeburger(Burger, user):
kings_burgers = []
queens_burgers = []
address = os.path.join(user.hometown, burger_king_addr)
burger_menu = Burger.menu()
for burger in burger_menu:
if burger == 'King':
kings_burgers.append({
'name': burger,
'price': price(burger)
})
else:
queens_burgers.append(...)
return (kings_burgers, queens_burgers)
i_haz_cheezeburger
関数が正しい値を含むタプルを返すかどうかをテストしたいと思います。いくつかの要素 (簡略化) に依存します: os
、helper.lib.price
、Burger
、およびuser
(ユーザー クラス)
私はmock
Michael Foordによってかなり新しいので、ここに私の初心者の試みがあります:
どこでも使用されていないように見えるためjoiner
、編集が間違っているように見えますか?price
def test_01(unittest.TestCase):
with patch('os.path.join') as joiner:
with patch('lolcat-web.lolapps.lolburger.burger.price') as price:
mock_user = MagicMock(name='user', spec=client.auth.User)
mock_user.hometown = 'New-York'
mock_burger = MagicMock(name='burger', spec=lolcat-web.lolapps.lolburger.Burger)
mock_burger.menu = [ '....sets up a list of samples .....' ]
# now call the function
response = i_get_cheezeburger(mock_burger, mock_user)
# now we do some assertions.....
これは筆記具のようなものです。メソッドi_haz_cheezeburger
にさらにいくつかの依存関係がある場合はどうなりますか。もちろん、それらをリファクタリングして、さらにいくつかのラッパー/ヘルパー関数を作成できます。しかし、問題は、または少なくとも 混乱です: 出力をテストしたいです。「ああ、定義された戻り値で渡されたため、スペルミス/バインドされていない割り当てはありません」と知りたくはありませんが、フィクスチャ(または のようなものの戻り値Burger.menu
)を設定するのは正しく聞こえません。
この種の問題に対処する適切な方法は何ですか? 私の誤解を正してください。