如何更改模拟 obj 的返回值?

car*_*lee 3 python unit-testing pandas python-unittest

我有课

import pandas as pd

class foo(object):
   def __init__(self):
      self.info = pd.DataFrame()

   def getData(self):
      self.__readCSV()

   def __readCSV(self):
      self.info = pd.read_csv(self.filename)
Run Code Online (Sandbox Code Playgroud)

我有一个单元测试类

class test(unittest.TestCase):
   def test(self):
      mock = patch('foo.pandas.read_csv')
      foo().getData()

      ...
Run Code Online (Sandbox Code Playgroud)

如何更改pd.read_csv(self.filename)返回值DataFrame({'column1': Series([1., 2., 3.]),'column2': Series([4., 5., 6.])})以测试是否self.info已分配assertEqual

Sha*_*hul 5

你在使用 Python 3 吗?Python 3 有一个内置的模拟库,但对于 Python 2.x,你需要使用第三方库(http://www.voidspace.org.uk/python/mock/index.html)。

要模拟,pd.read_csv您可以使用以下内容:

import unittest
# for Python 3.x
from unittest.mock import patch

# for Python 2.x
# from mock import patch
import pandas as pd

class test(unittest.TestCase):
    @patch('foo.pd.read_csv')
    def test(self, mock_read_csv):
        mock_read_csv.return_value = pd.DataFrame({'column1': Series([1., 2., 3.]),'column2': Series([4., 5., 6.])})
        assert foo().getData()
Run Code Online (Sandbox Code Playgroud)