2024-04-26 23:44:39 发布
网友
我正在做一些集成测试,我想知道如何获得一些内部函数的返回值,我曾考虑过使用mocks,但那里只有get参数
示例:
def foo(): goo() def goo(): return 3 def test(): with patch(goo) as goo_mock: foo() assert goo_mock.return_value == 3
下面是一个在windows上运行的Python2.7.10和3.6.1的答案
import sys if sys.version_info[0] < 3: from mock import patch else: from unittest.mock import patch def foo(): return goo() def goo(): return 3 class CaptureValues(object): def __init__(self, func): self.func = func self.return_values = [] def __call__(self, *args, **kwargs): answer = self.func(*args, **kwargs) self.return_values.append(answer) return answer def test(): with patch('__main__.goo', CaptureValues(goo)) as goo_mock: x = foo() x = foo() print(goo_mock.return_values) assert goo_mock.return_values == [3, 3] if __name__ == '__main__': test()
return_value用于希望函数返回任意值以便测试其他部分。这里有一个goo计算时间很长。我已经在其他地方测试了goo,我正在测试foo的内部结构,我不想等待5秒钟来计算goo返回的真实答案。(要看到区别,请取消注释slow_test并观看激动人心的倒计时)
return_value
goo
foo
slow_test
通常,您希望使用mock从助手goo创建一个假答案。这是为了确保foo与来自goo的特定答案一起按预期工作,和/或测试在将数据转换为goo时,是否传递了正确的数据。在
mock_goo.assert_called_with()
mock_goo.return_value
下面是一个在windows上运行的Python2.7.10和3.6.1的答案
^{pr2}$return_value
用于希望函数返回任意值以便测试其他部分。这里有一个goo
计算时间很长。我已经在其他地方测试了goo
,我正在测试foo
的内部结构,我不想等待5秒钟来计算goo
返回的真实答案。(要看到区别,请取消注释slow_test
并观看激动人心的倒计时)通常,您希望使用mock从助手
goo
创建一个假答案。这是为了确保foo
与来自goo
的特定答案一起按预期工作,和/或测试在将数据转换为goo
时,是否传递了正确的数据。在goo
foo
:mock_goo.assert_called_with()
确保传递了goo
正确的值mock_goo.return_value
设置为使用从goo
返回的各种值测试foo
相关问题 更多 >
编程相关推荐