如何让python的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并第二次称为例外。我该怎么做?

正如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,但是我不确定您想提高什么例外...

您可以使用side_effect而不是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.

相关内容

  • 没有找到相关文章

最新更新