如何让python的MagicMock在第一次调用时返回一个值,并在第二次调用时引发异常?

时间:2017-09-27 04:51:05

标签: 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

一切正常。大。

但我希望模拟的方法在第一次调用时返回Goodbye,并在第二次调用时引发异常。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

正如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 :(得分:1)

您可以使用return_value代替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. ,例如:

n=0;
while (n<10) {
     n+=parseInt(prompt('enter a number'));
}