【问题标题】:unittest Mock - patch return valueunittest Mock - 补丁返回值
【发布时间】:2015-06-19 10:19:55
【问题描述】:

我想我误解了如何使用模拟来更改函数返回值。这是我的测试:

from path.to import programme_finder
@patch('path.to.programme_finder._calc_update_interval')
def test_refresh_interval(self,method_mock):
    today = datetime.datetime.now()
    dd = datetime.timedelta(millisecond=20)
    earlier_date = today - dd
    #The normal function returns a 5 day interval.
    # For tests I want it down to 20ms
    method_mock.return_value = earlier_date
    #Here I would expect a date object, instead I get MagicMock
    print("Calc returns %s " % programme_finder._calc_update_interval)
    # rest of the test irrelevant 
    self.fail("need to time responce time")

我做错了什么?我如何让programme_finder._calc_update_interval 返回我修补的datetime

试过了

assert programme_finder._calc_update_interval == earlier_date

同样失败。

#programme_finder.py
def _calc_update_interval():
    today = datetime.datetime.now()
    # The days we want to subtract for today.
    update_interval = current_app.config.get("RESOURCE_UPDATE_INTERVAL")
    dd = datetime.timedelta(days=update_interval)
    # Find which date it was x days ago 
    earlier_date = today - dd
    return earlier_date

【问题讨论】:

    标签: python unit-testing python-3.4 python-unittest


    【解决方案1】:

    在我看来,您并没有调用该函数——您是按名称引用它,因此您返回的是模拟函数而不是模拟返回值。

    print("Calc returns %s " % programme_finder._calc_update_interval )
                                                                     ^reference
    

    应该是

    print("Calc returns %s " % programme_finder._calc_update_interval() )
                                                                     ^^call
    

    【讨论】:

      【解决方案2】:

      问题似乎是_calc_update_interval 是一个属性(我猜是用@property 装饰器创建的)而不是一个方法。最简单的方法是简单地使用模拟提供的PropertyMock 类(记录在here):

      @patch('path.to.programme_finder._calc_update_interval', new_callable=PropertyMock):
      def test_refresh_interval(self,method_mock):
          #...
      

      【讨论】:

      • 没有 _calc_update_interval 是一个函数。我会把它添加到问题中。
      猜你喜欢
      • 1970-01-01
      • 2019-09-12
      • 2020-11-26
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多