4

我有以下使用模拟的 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在第一次调用时返回,并在第二次调用时引发异常。我怎样才能做到这一点??

4

2 回答 2

5

正如 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

显然你可能不想提出 bare Exception,但我不确定你想要提出什么异常......

于 2017-09-27T05:24:04.753 回答
1

您可以使用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.
于 2017-09-27T05:14:46.917 回答