gpt4 book ai didi

Python 模拟 : how do I change behavior based on input values?

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:45 25 4
gpt4 key购买 nike

我有一个类,我试图用 python 测试覆盖它。

我有一个被注入(inject)到类中的依赖项。

class UnderTest:
def __init__(self, dependency):
self.dependency = dependency

我真的不关心这里依赖的内部结构,而是想模拟它。

所以我在测试中实例化类,注入(inject)依赖项:

dependency = MagicMock()
dependency.some_func = MagicMock(return_value='blue')
under_test = UnderTest(dependency)

稍后当我想测试类 UnderTest 时,我希望依赖项根据传递给它的参数返回不同的值。所以在被测代码中,我可能有类似的东西

value = dependency.some_func('a')

但我也希望依赖项在使用不同的值调用时返回其他内容。

value = dependency.some_func('b')

理想情况下(我已经在其他框架中看到了这一点),我将能够配置模拟以返回不同的值,例如(我希望它如何工作)

dependency.some_func = MagicMock([
{'called_with': 'a', 'return_value': 'blue'},
{'called_with': 'b', 'return_value': 'green'}
])

最佳答案

您可以使用 side_effect属性来设置一个根据其参数返回不同值的可调用对象。

results = {'a': 'blue', 'b': 'green'}
dependency.some_func = MagicMock(side_effect=lambda arg: results.get(arg, DEFAULT))

(DEFAULT singleton 用于表示正常模拟返回值用于不在字典中的参数。)

关于Python 模拟 : how do I change behavior based on input values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46651836/

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