首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MagicMock对象上设置值。因此被测函数不会返回MagicMock对象

如何在MagicMock对象上设置值。因此被测函数不会返回MagicMock对象
EN

Stack Overflow用户
提问于 2018-07-30 10:21:01
回答 1查看 284关注 0票数 0

嘿,我刚刚开始用Python进行单元测试和模拟。尝试测试一个函数,该函数接受单列数据帧,并在根据数据帧值进行一些计算后返回一个浮点数。

代码语言:javascript
复制
import unittest
from unittest.mock import MagicMock

def avg_annual_fcf_growth_rate(fcf_data_frame):
    delta = fcf_data_frame.iloc[9][0] - fcf_data_frame.iloc[0][0]
    avg_growth_rate = (delta**(1/9))-1 
    return avg_growth_rate

class Test_DCF(unittest.TestCase):

    def test_fcf_calculation(self):
        mock_fcf = MagicMock()
        mock_fcf.iloc[9][0].return_value = 100
        mock_fcf.iloc[0][0].return_value = 10
        result = avg_annual_fcf_growth_rate(mock_fcf)
        expected = ((100-10)**(1/9)) - 1
        self.assertEqual(result, expected)

if __name__ == '__main__':
    unittest.main()

#Sample dataframe 
         Free Cash Flow USD Mil
2008-12                  5114.0
2009-12                 10909.0
2010-12                 11915.0
2011-12                 12285.0
2012-12                 11175.0
2013-12                 16617.0
2014-12                 16825.0
2015-12                 15409.0
2016-12                 19581.0
2017-12                 34068.0

我遇到了一个问题,结果是一个MagicMock对象而不是一个浮点数。我试着寻找答案,但无法理解如何正确设置模拟对象的返回值。

运行测试的输出。

代码语言:javascript
复制
F
======================================================================
FAIL: test_fcf_calculation (__main__.Test_DCF)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "path/to/intrinsic_value_dcf_test.py", line 18, in test_fcf_calculation
    self.assertEqual(result, expected)
AssertionError: <MagicMock name='mock.iloc.__getitem__().[56 chars]104'> != 0.6486864043382532

----------------------------------------------------------------------
Ran 1 test in 0.004s

FAILED (failures=1)
EN

回答 1

Stack Overflow用户

发布于 2018-07-30 10:44:20

据我所知,问题出现在重复的__getitem__调用中。不过,下面的方法是可行的:

代码语言:javascript
复制
def test_fcf_calculation(self):
    mock_fcf = MagicMock()

    mock_fcf.iloc.__getitem__.return_value = MagicMock(**{'__getitem__.side_effect': [100, 10]})

    result = avg_annual_fcf_growth_rate(mock_fcf)
    expected = ((100-10)**(1/9)) - 1
    print(mock_fcf.mock_calls)
    self.assertEqual(result, expected)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51586225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档