使用参数模拟类

问题描述 投票:0回答:1

这是我下面的方法,它返回一个数据框

def refactorReport( df):
    """Enhance with additional information as needed"""
    for userclass in [ 'ClassA', 'ClassB', 'ClassC' ]:
        df[ '%s_Region'%userclass ] = df[ userclass ].apply(lambda x: commutils.UserNameMapper( x ).Region() )
    return df

我该如何嘲笑这个

commutils.UserNameMapper(x)

我尝试过这个,但两者都给了我“预期的自我参数”:

class DummyUserNameMapper():

    def __init__( self, thename ):
        self.thename = thename

    def Region( self ):
        print(self.thename)
        return 'Region%s'%self.thename[-1]


class ModuleTests(unittest.TestCase):

    def test_refactorReport(self):
        with mock.patch("commutils.UserNameMapper", return_value=DummyUserNameMapper):
            print(refactorReport(self.records))

    @mock.patch('commutils.UserNameMapper')
    def test_refactorReport_New(self, mockUser):
        mockUser.return_value = DummyUserNameMapper
        print(refactorReport(self.records))
    

哪里

self.records

>>> import pandas as pd
>>> data = [()]
>>> data = [
...     ('Name 1', 'Apple', 'Mango', 'Orange'),
...     ('Name 2', 'Pear', 'Apple', 'Banana'),
...     ('Name 3', 'Banana', 'Mango', 'Orange'),
...     ('Name 4', 'Apple', 'Pear', 'Orange'),
...     ('Name 5', 'Pear', 'Mango', 'Orange'),]
... 
>>> df = pd.DataFrame(data,columns=['Name', 'ClassA', 'ClassB', 'ClassC'])
python unit-testing class mocking
1个回答
0
投票

不确定之前出了什么问题,但这有效:

def test_refactorReport(self):
    with mock.patch("commutils.UserNameMapper", return_value=DummyUserNameMapper):
        print(refactorReport(self.records))
© www.soinside.com 2019 - 2024. All rights reserved.