は、私は機能i_haz_cheezeburger
はそれで正しい値で、タプルを返すかどうかをテストしたいのは、このシナリオにこのような状況で私たちはどのように嘲笑しますか?
# 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)
を設置してみましょう。これは、いくつかのこと(簡素化)によって異なります。os
、helper.lib.price
、Burger
、およびuser
(Userクラス)
私はマイケルFoordによってmock
にかなり新しいですので、ここに私の初心者の試みがある:
編集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
などの戻り値)を設定するのは正しくはありません。
この種の問題を処理する適切な方法は何ですか?私の誤解を訂正してください。
ありがとうございました。ほとんどの依存関係をリファクタリングするのは常に良い選択ですか?これらの新たにリファクタリングされたメソッドのそれぞれに対してunittestを書くべきですか? – user1012451