2012-04-10 15 views
0

は、私は機能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) 

を設置してみましょう。これは、いくつかのこと(簡素化)によって異なります。oshelper.lib.priceBurger、およびuser(Userクラス)

私はマイケルFoordによってmockにかなり新しいですので、ここに私の初心者の試みがある:

編集joinerpriceはどこにも使われていないようですので間違っていますか?

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などの戻り値)を設定するのは正しくはありません。

この種の問題を処理する適切な方法は何ですか?私の誤解を訂正してください。

答えて

3

標準ライブラリモックはいけない - 標準ライブラリに問題がある場合、あなたは大きな問題を抱えている(ので、それをされてあざける、あなたはほぼ確実に標準ライブラリを統合、テストじゃない言及しません潜在的な失敗を隠すだけです)。

戻り値がBurger.menu()に依存する場合は、戻り値をテストする場合はBurger.menu()の模擬バージョンの戻り値を設定する必要があります。それが正しいことです。現実の入力の制御されたバージョンである模擬入力を提供するので、制御された入力が与えられれば特定の出力を期待できます。 mockを使用しても、すべて実際の現実的なデータは除外されません。

+0

ありがとうございました。ほとんどの依存関係をリファクタリングするのは常に良い選択ですか?これらの新たにリファクタリングされたメソッドのそれぞれに対してunittestを書くべきですか? – user1012451

関連する問題