如何在 python unittest 中永久模拟函数的 return 值
How to permanently mock return value of a function in python unittest
我有一个功能
# foo.py
NUM_SHARDS = 10
def get_shard(shard_key: int) -> int
return (shard_key % NUM_SHARDS) + 1
我想模拟这个函数,这样每当调用这个函数时,它 return 就是一个特定的值。我试过像这样打补丁
# test.py
@mock.patch('foo.get_shard', return_value=11)
def testSomething(self, patched_func):
patched_func() # >> 11 ... OK so this is fine but
get_shard(4) # >> 5 .... Original impl being executed
我想深入修改这个函数总是return这个值,不管这个函数是否直接从unittest调用。
对于上下文,我有许多生产分片 (10) 和一个测试分片 (11)。 get_shard 函数被多次调用,该函数的生产版本只能识别 10 个分片。因此,我希望此函数在单元测试上下文中执行时始终为 return 11(测试分片编号)。
mock.patch
方法用于临时模拟给定对象。如果你想永久改变一个函数的 return 值,你可以简单地通过给它分配一个 Mock
对象并指定 return_value
来覆盖它:
import foo
from unittest.mock import Mock
foo.get_shard = Mock(return_value=11)
我有一个功能
# foo.py
NUM_SHARDS = 10
def get_shard(shard_key: int) -> int
return (shard_key % NUM_SHARDS) + 1
我想模拟这个函数,这样每当调用这个函数时,它 return 就是一个特定的值。我试过像这样打补丁
# test.py
@mock.patch('foo.get_shard', return_value=11)
def testSomething(self, patched_func):
patched_func() # >> 11 ... OK so this is fine but
get_shard(4) # >> 5 .... Original impl being executed
我想深入修改这个函数总是return这个值,不管这个函数是否直接从unittest调用。
对于上下文,我有许多生产分片 (10) 和一个测试分片 (11)。 get_shard 函数被多次调用,该函数的生产版本只能识别 10 个分片。因此,我希望此函数在单元测试上下文中执行时始终为 return 11(测试分片编号)。
mock.patch
方法用于临时模拟给定对象。如果你想永久改变一个函数的 return 值,你可以简单地通过给它分配一个 Mock
对象并指定 return_value
来覆盖它:
import foo
from unittest.mock import Mock
foo.get_shard = Mock(return_value=11)