如何更改模拟对象的 return 值?
How to change return value of mocked obj?
我有class和
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)
我有一个单元测试 class
class test(unittest.TestCase):
def test(self):
mock = patch('foo.pandas.read_csv')
foo().getData()
...
如何将 pd.read_csv(self.filename)
return 值更改为 DataFrame({'column1': Series([1., 2., 3.]),'column2': Series([4., 5., 6.])})
以测试 self.info
是否已分配,assertEqual
?
您在使用 Python 3 吗? Python3内置了mock库,但是对于Python2.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()
模拟对象有 属性 side_effect、
class test(unittest.TestCase):
def test(self):
mock = patch('foo.pandas.read_csv')
mock.side_effect = my_data_formatter
foo().getData()
现在您需要定义 my_data_formatter 函数,以所需格式重新运行您想要的数据。对于你的 pd.read_csv(self.filename) 它可能是
def my_data_formatter(my_file):
# formatting for the data you want.
return DataFrame({'column1': Series([1., 2., 3.]),'column2': Series([4., 5., 6.])})
我有class和
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)
我有一个单元测试 class
class test(unittest.TestCase):
def test(self):
mock = patch('foo.pandas.read_csv')
foo().getData()
...
如何将 pd.read_csv(self.filename)
return 值更改为 DataFrame({'column1': Series([1., 2., 3.]),'column2': Series([4., 5., 6.])})
以测试 self.info
是否已分配,assertEqual
?
您在使用 Python 3 吗? Python3内置了mock库,但是对于Python2.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()
模拟对象有 属性 side_effect、
class test(unittest.TestCase):
def test(self):
mock = patch('foo.pandas.read_csv')
mock.side_effect = my_data_formatter
foo().getData()
现在您需要定义 my_data_formatter 函数,以所需格式重新运行您想要的数据。对于你的 pd.read_csv(self.filename) 它可能是
def my_data_formatter(my_file):
# formatting for the data you want.
return DataFrame({'column1': Series([1., 2., 3.]),'column2': Series([4., 5., 6.])})