如何模拟一个基于其* args输入返回值的函数?

用户11435431

我有一个foo调用另一个函数的函数get_info_from_tags

这是get_info_from_tags实现:

def get_info_from_tags(*args):
    instance_id = get_instance_id()
    proc = subprocess.Popen(["aws", "ec2", "describe-tags", "--filters", f"Name=resource-id,Values={instance_id}"],
                            stdout=subprocess.PIPE, shell=True)
    (out, err) = proc.communicate()
    em_json = json.loads(out.decode('utf8'))
    tags = em_json['Tags']  # tags list

    results = []

    for arg in args:
        for tag in tags:
            if tag['Key'] == arg:
                results.append(tag['Value'])

    return results

有一组10个可能的args可以传递给get_info_from_tags,而我需要返回正确的数组(我不想调用aws服务,这就是我的模拟的目的,我将手动设置值一本字典)。

get_info_from_tags如何嘲笑,以便我打电话时

get_info_from_tags('key1', 'key2' ...)

在foo函数中,我得到想要的结果吗?

我已经尝试过pytest的某些功能,但似乎我不太了解。

一个可能的解决方案是创建另一个函数:


def mocked_get_info_from_tags(*args):
    values = []
    for arg in args:
        values.append(my_dictionary[arg])
    return values

但是我不知道如何在测试环境中实现此替代。

谢谢。

BłażejMichalik

unittest.mock.patch 是你的朋友。

您没有指定模块名称,因此我在其中放置了一些<placeholders>

from unittest.mock import patch
from <module_with_foo> import foo
from <module_with_mock> import mocked_get_info_from_tags

with patch('<module_with_foo>.get_info_from_tags', mocked_get_info_from_tags):
    foo()

这将替换get_info_from_tags为该函数的模拟版本。替换是在模块级别完成的,因此模块<module_with_foo>中调用的所有内容get_info_from_tags现在将调用您的模拟。


请注意以下路径patch

patch替换模块属性的值。因此,如果您有一个moo带有function的模块foo,该bar模块从module调用moo2

# moo module
from moo2 import bar

def foo():
    bar()

......从角度看patchmoo.foo电话moo.bar,不是moo2.bar因此,您必须在使用功能的地方(而不是在定义功能的地方)修补模块。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将一个函数的输入值与另一个函数的返回值进行比较?

来自分类Dev

模拟函数/对象,并根据输入/条件返回值

来自分类Dev

输入对应的变量后,如何使函数返回值?

来自分类Dev

调用另一个模拟函数时更改模拟函数的返回值

来自分类Dev

multiprocessing 的返回值,作为python中另一个函数的输入

来自分类Dev

Moq函数调用始终返回值,即使输入与模拟输入值不匹配也是如此

来自分类Dev

JavaScript:创建返回基于输入参数返回值或对象的函数的函数

来自分类Dev

如何重复一个函数,直到它的返回值与之前的返回值匹配?

来自分类Dev

如何在java8中定义没有args或返回值的函数?

来自分类Dev

如何模拟异步函数的返回值?

来自分类Dev

如何从函数返回值

来自分类Dev

如何从函数返回值

来自分类Dev

MagicMock基于输入的返回值

来自分类Dev

如何使用 R 的优化、优化函数等来查找提供特定返回值的函数输入?

来自分类Java

如何优雅地创建一个返回lambda返回值或什么都不返回的函数?

来自分类Dev

PHP在返回值之前遍历一个函数

来自分类Dev

使用另一个函数返回值

来自分类Dev

一个仅从KeyValuePair返回值的函数

来自分类Javascript

缓存其参数的返回值的函数

来自分类Dev

如何在另一个函数中引用 2 个函数的返回值?

来自分类Dev

如何创建一个布尔数组,其值基于索引数组?

来自分类Dev

如何模拟构造函数的链接函数的返回值?

来自分类Dev

如何在python中使用户可以输入的函数的返回值

来自分类Dev

如何通过Golang中的短变量声明为函数输入分配返回值?

来自分类Dev

Python模拟如何编辑模拟函数的返回值

来自分类Dev

如何在拥有一个期货后立即确认其返回值

来自分类Dev

如何使用函数返回值作为PHP中另一个函数的参数?

来自分类Dev

如何编写一个基于输入返回“n”个函数列表的函数

来自分类Dev

如何正确从函数返回值?

Related 相关文章

  1. 1

    如何将一个函数的输入值与另一个函数的返回值进行比较?

  2. 2

    模拟函数/对象,并根据输入/条件返回值

  3. 3

    输入对应的变量后,如何使函数返回值?

  4. 4

    调用另一个模拟函数时更改模拟函数的返回值

  5. 5

    multiprocessing 的返回值,作为python中另一个函数的输入

  6. 6

    Moq函数调用始终返回值,即使输入与模拟输入值不匹配也是如此

  7. 7

    JavaScript:创建返回基于输入参数返回值或对象的函数的函数

  8. 8

    如何重复一个函数,直到它的返回值与之前的返回值匹配?

  9. 9

    如何在java8中定义没有args或返回值的函数?

  10. 10

    如何模拟异步函数的返回值?

  11. 11

    如何从函数返回值

  12. 12

    如何从函数返回值

  13. 13

    MagicMock基于输入的返回值

  14. 14

    如何使用 R 的优化、优化函数等来查找提供特定返回值的函数输入?

  15. 15

    如何优雅地创建一个返回lambda返回值或什么都不返回的函数?

  16. 16

    PHP在返回值之前遍历一个函数

  17. 17

    使用另一个函数返回值

  18. 18

    一个仅从KeyValuePair返回值的函数

  19. 19

    缓存其参数的返回值的函数

  20. 20

    如何在另一个函数中引用 2 个函数的返回值?

  21. 21

    如何创建一个布尔数组,其值基于索引数组?

  22. 22

    如何模拟构造函数的链接函数的返回值?

  23. 23

    如何在python中使用户可以输入的函数的返回值

  24. 24

    如何通过Golang中的短变量声明为函数输入分配返回值?

  25. 25

    Python模拟如何编辑模拟函数的返回值

  26. 26

    如何在拥有一个期货后立即确认其返回值

  27. 27

    如何使用函数返回值作为PHP中另一个函数的参数?

  28. 28

    如何编写一个基于输入返回“n”个函数列表的函数

  29. 29

    如何正确从函数返回值?

热门标签

归档