在调用静态方法的类中为方法编写单元测试

时间:2018-06-12 17:39:54

标签: python unit-testing

我的班级中有以下静态方法:

@staticmethod
def get_previous_month(date):
    previous_month = date - relativedelta.relativedelta(months=1)
    return previous_month

在它下面,我在课堂方法中使用它。

def transform_last_price(self, data):

    full_data = data. \
        addfield('TimeSeriesValue'). \
        convert('EffectiveDate', lambda x: date_converter(x)) 

    # Break table to dict_data... Does other stuff...

    # Calls static method:
    base_month = get_previous_month(dict_data[0]['EffectiveDate'])

    # Do more stuff...

    # Transform mapped dict into table
    lastPriceData = etl. \
        fromdicts(dict_data). \
        addfield('FundID', self.FUND_ID). \
        addfield('TimeSeriesTypeID', 12). \
        cutout('MTDReturn')

    return lastPriceData

我试图编写一个单元测试,检查是否有一些日期被转换为日期对象。

def test_convert_date_strings_to_date_objects(self):
    data = etl.fromdicts([{'EffectiveDate': '1990-08-31'}])
    transformed_dates = self.parser.transform_last_price(data)
    date = transformed_dates.values('EffectiveDate')[0]
    self.assertIsInstance(date, datetime.date)

但是,我收到以下错误:

NameError: name 'get_previous_month' is not defined

我假设测试无法访问静态方法?我不知道怎么重写这个。我已经单独为get_previous_month编写了一个测试并且它正在运行,但我正在为transform_last_price

编写更多的集成测试

1 个答案:

答案 0 :(得分:1)

应使用语法调用

静态方法:self.methodName()或Class.methodName()。你只需使用不起作用的methodName。 (Python会尝试针对全局命名空间解决它)