【发布时间】:2020-05-11 17:56:39
【问题描述】:
我有一个模拟 api 调用的函数,如下所示:
def mocked_api_call(animal = animal, soundtype=soundtype)
output = make_sound(animal, soundtype)
return output
目标是让模拟在第二次使用相同的参数集调用时返回不同的输出。例如,我希望第一次调用返回'meow',第二次返回'MEAAAOWWW',第三次调用返回'mew',如下所示:
output = mocked_api_call(animal='cat', soundtype = 'meow')
# outputs 'meow'
output = mocked_api_call(animal='cat', soundtype = 'meow')
# outputs 'MEAAAOWWW'
output = mocked_api_call(animal='cat', soundtype = 'meow')
# outputs 'mew'
补丁用于测试使用调用api的函数的父函数:
def parent_function(**kwargs):
response = make_sound(animal=animal, soundtype=soundtype)
测试函数通过这样的monkeypatch调用:
@mock.patch('myscript.api_call', side_effect=mocked_api_call)
def test_parent_function(*args, **kwargs):
output = parent_function(**kwargs)
但我找不到一种方法来生成取决于函数被调用次数的响应。这是你可以用 pytest 做的事情吗?
【问题讨论】:
-
那么你想从哪里得到输出呢?它应该是随机的(例如“MEAAAOWWW”来自哪里)?一般情况下,您可能可以使用
side_effect,但这取决于您要实现的目标。 -
@MrBeanBremen 我希望输出有所不同,具体取决于它是第一次还是第二次调用该函数。
-
你看过side_effect吗?
-
@MrBeanBremen - 我有 - 在上面添加了更多详细信息。我希望这会有所帮助。
-
好的,问题是您在单次测试中需要什么 - 一种特定动物和声音类型的不同输出?
标签: python unit-testing automated-tests pytest