如何获取python';s MagicMock在第一次调用时返回值,在第二次调用时引发异常?
我有以下使用模拟的python程序如何获取python';s MagicMock在第一次调用时返回值,在第二次调用时引发异常?,python,mocking,magicmock,Python,Mocking,Magicmock,我有以下使用模拟的python程序 #!/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 一切都正常运转。太好了 但是我希望mockout方法在第一次调用时返回再见,并在第二次调用
#!/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
一切都正常运转。太好了
但是我希望mockout方法在第一次调用时返回
再见
,并在第二次调用时引发异常。我该怎么做呢?您可以使用副作用
而不是返回值
,例如:
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.
导入模拟
a=0
定义我的函数1():
全球a
a+=1
如果a<2:
回复“再见”
其他:
引发异常()
my_func=mock.MagicMock()
我的功能副作用=我的功能1
打印我的函数()
#输出再见
打印我的函数()
#提出了一个例外。
正如Sraw指出的,您可以使用副作用。我可能会使用生成器函数,而不是引入全局函数:
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
显然,您可能不想引发一个简单的异常,但我不确定您想引发什么异常