【问题标题】:How to permanently mock return value of a function in python unittest如何在python unittest中永久模拟函数的返回值
【发布时间】:2019-05-14 22:44:07
【问题描述】:

我有一个函数

# foo.py
NUM_SHARDS = 10
def get_shard(shard_key: int) -> int
    return (shard_key % NUM_SHARDS) + 1

我想模拟这个函数,这样每当调用这个函数时,它都会返回一个特定的值。我试过这样的补丁

# 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

我想深入修改此函数以始终返回此值,无论此函数是否直接从单元测试中调用。

就上下文而言,我有许多生产分片 (10) 和一个测试分片 (11)。 get_shard 函数被多次调用,该函数的生产版本只知道 10 个分片。所以,我希望这个函数在单元测试的上下文中执行时总是返回 11(测试分片号)。

【问题讨论】:

    标签: python python-3.x mocking patch python-unittest


    【解决方案1】:

    mock.patch 方法用于临时模拟给定对象。如果你想永久改变一个函数的返回值,你可以简单地通过指定Mock 对象并指定return_value 来覆盖它:

    import foo
    from unittest.mock import Mock
    foo.get_shard = Mock(return_value=11)
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2022-01-14
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多