Python的mock.patch不嘲笑我的功能?

问题描述

所以我写了一个非常简单的测试用例和函数。我似乎无法找出问题所在。有人有主意吗?我觉得应该可以。

import pandas
import unittest
from unittest import mock
from unittest.mock import Magicmock,Mock

def my_func():
    temp = pandas.ExcelFile('temp.xlsx')
    return temp.parse()    

@mock.patch('pandas.ExcelFile')
def test_func(pd):
    pd.parse.return_value = 10
    print(pd.parse())
    print(my_func())

输出仅给出以下内容

10
<Magicmock name='ExcelFile().parse()' id='140620591125360'>

解决方法

根据@MrBean Bremen的评论提供完整的单元测试解决方案。

index_63929989.py

import pandas


def my_func():
    temp = pandas.ExcelFile('temp.xlsx')
    return temp.parse()

test_index_63929989.py

import unittest
from unittest import mock
from index_63929989 import my_func


class TestIndex(unittest.TestCase):
    @mock.patch('pandas.ExcelFile')
    def test_func(self,mock_pd_excelFile):
        mock_pd_excelFile.return_value.parse.return_value = 10
        actual = my_func()
        mock_pd_excelFile.assert_called_with('temp.xlsx')
        self.assertEqual(actual,10)


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

具有覆盖率报告的单元测试结果:

coverage run /Users/ldu020/workspace/github.com/mrdulin/python-codelab/src/stackoverflow/63929989/test_index_63929989.py && coverage report -m --include="src/*"
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
Name                                                Stmts   Miss  Cover   Missing
---------------------------------------------------------------------------------
src/stackoverflow/63929989/index_63929989.py            4      0   100%
src/stackoverflow/63929989/test_index_63929989.py      11      0   100%
---------------------------------------------------------------------------------
TOTAL                                                  15      0   100%

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...