gpt4 book ai didi

python-3.x - 如何在for循环中动态模拟python函数的结果?

转载 作者:行者123 更新时间:2023-12-03 08:33:53 25 4
gpt4 key购买 nike

我正在尝试实现一些单元测试来验证包含 for 循环的方法。此方法接收一个项目列表,并为每个项目执行一个函数 foo(),并将该项目作为参数。

有谁知道如何模拟 foo() 函数以根据作为输入提供的元素动态提供模拟的返回值?

方法:

def foo(i):
if i == 'this':
return 'a'
else:
return 'b'

def bar(items):
results = []
for item in items:
results.append(foo(item))
return results

单元测试:

from unittest import TestCase
from mock import patch

class TestCaseBar(TestCase):

@patch('my_module.foo')
def test_bar(self, mock_foo):
mock_foo.return_value = 'dummy' # I would like to dinamically mock this.
items = ['this', 'that']
result = bar(items)
self.assertEqual(result, ['a', 'b'])
self.assertTrue(mock_foo.call_count, 2)

预先感谢您的回答。

最佳答案

您可以将一个函数分配给模拟对象的 side_effect 属性。然后,您可以为其实现模拟的详细信息。

A function to be called whenever the Mock is called. See the side_effect attribute. Useful for raising exceptions or dynamically changing return values.

例如

my_module_64443736.py:

def foo(i):
if i == 'this':
return 'a'
else:
return 'b'


def bar(items):
results = []
for item in items:
results.append(foo(item))
return results

test_my_module_64443736.py:

from unittest import TestCase, main
from unittest.mock import patch
from my_module_64443736 import bar


class TestCaseBar(TestCase):

@patch('my_module_64443736.foo')
def test_bar(self, mock_foo):
def dynamicMock(i):
if i == 'this':
return 'teresa teng'
else:
return 'best singer'
mock_foo.side_effect = dynamicMock
items = ['this', 'that']
result = bar(items)
self.assertEqual(result, ['teresa teng', 'best singer'])
self.assertTrue(mock_foo.call_count, 2)


if __name__ == '__main__':
main()

单元测试结果:

.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Name Stmts Miss Cover Missing
-------------------------------------------------------------------------------------
src/stackoverflow/64443736/my_module_64443736.py 9 3 67% 2-5
src/stackoverflow/64443736/test_my_module_64443736.py 16 0 100%
-------------------------------------------------------------------------------------
TOTAL 25 3 88%

关于python-3.x - 如何在for循环中动态模拟python函数的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64443736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com