2017-09-27 4 views
1

私はモックを使用する次のpythonプログラムを持っています。PythonのMagicMockを最初に呼び出したときに値を返す方法と、呼び出されたときに例外を発生させる方法はありますか?

#!/usr/bin/env python 
import mock 

def my_func1(): 
    return "Hello" 

my_func = mock.MagicMock() 
my_func.return_value = "Goodbye" 

print my_func() 
print my_func() 

出力:それが必要として

Goodbye 
Goodbye 

すべてが機能しています。すばらしいです。

は、しかし、私は出て嘲笑方法がGoodbyeそれが呼び出された最初の時間を返し、例外にそれが呼び出された二回目を上げたいです。どうやってやるの??

答えて

1

のsRawが指摘したように、あなたがside_effectを使用することができます。私はおそらくジェネレータ関数を使用するのではなくグローバルに導入する:

import mock 

def effect(*args, **kwargs): 
    yield "Goodbye" 
    while True: 
     yield Exception 

my_func = mock.MagicMock() 
my_func.side_effect = effect() 

my_func() #Returns "Goodbye!' 
my_func() #Raises exception 
my_func() #Raises exception 

明らかにあなたは、おそらく裸Exceptionを調達する必要はありませんが、私はあなたが提起したいし、どのような例外で確認されませんでした...

1

次の例のように、代わりにreturn_valueside_effectを使用することができます。

import mock 

a = 0 
def my_func1(): 
    global a 
    a += 1 
    if a < 2: 
     return "Goodbye" 
    else: 
     raise Exception() 

my_func = mock.MagicMock() 
my_func.side_effect = my_func1 
print my_func() 
# output Goodbye 
print my_func() 
# An exception was raised. 
関連する問題