2013-08-27 7 views
6

私は 'ランダム'モジュールを使用するいくつかのコードをテストすることに興味があり、テストが実行されているときに私自身の偽のバージョンをランダムに挿入することができます後で通常のランダムモジュールに戻ります。ドキュメントから、私はクラスにパッチを当てることができます。関数にパッチを当てる方法はありますか?このようなもの:unittest.mock.patchを使って 'random'にパッチを当てることはできますか?

def my_code_that_uses_random(): 
    return random.choice([0, 1, 2, 3]) 

with patch.function(random.choice, return_value=3) as mock_random: 
    choice = my_code_that_uses_random() 
    assert choice == 3 

そのコードは機能しませんが、代わりに何が必要ですか?

答えて

5

patch.functionは存在しないようです。代わりにpatch自体を使用することができます。

with patch('random.choice', return_value=3) as mock_random: 
    choice = my_code_that_uses_random() 
    assert choice == 3 
+2

あなたはあなたが 'return_value'を置き換えることができ、実際の機能とそれを交換する必要がある場合:' side_effect =ラムダ配列:配列を[0] '。これにより、実際にシーケンスを渡して要素を取り出してテストすることができます。この場合、最初の要素を常に「選択」します。 – phoenix