AssertAlmostEqual для значения в dict

1

У меня есть следующий код:

def test_transformation_last_price(self):
    data_set = etl.fromdicts([{'MTDReturn': 4, 'EffectiveDate': '1992-06-30'},
                              {'MTDReturn': 3.2, 'EffectiveDate': '1992-07-31'}])
    last_price_dataset = self.parser.last_price_dataset(data_set)
    first_row = list(etl.dicts(last_price_dataset))[0]
    expected_row = {'TimeSeriesValue': 121.20923188958272,
                    'EffectiveDate': datetime.date(1992, 6, 30),
                    'FundID': self.parser.FUND_ID,
                    'TimeSeriesTypeID': self.parser.LAST_PRICE_ID}
    self.assertEqual(first_row, expected_row)

Мой метод: last_price_dataset запускает несколько других методов, которые по существу захватывают значение из базы данных и производят некоторые вычисления на основе этого. В данный момент это проходит, и это правильно. Однако это значение может меняться на несколько десятичных знаков здесь и там.

Есть ли unittest, который я могу использовать, проверяет, близко ли TimeSeriesValue это число в dict?

AssertAlmostEqual не работает с такими AssertAlmostEqual. Какие-либо предложения?

Теги:
unit-testing

1 ответ

0
Лучший ответ

Вы можете использовать TestCase.assertAmostEqual (подробнее читайте здесь - https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertAlmostEqual):

assertAlmostEqual(first, second, places=7, msg=None, delta=None)

Например, если точность равна 0 знакам после запятой, то проходит следующий тест:

from unittest import TestCase
from unittest import main

class Test(TestCase):
    def test_1(self):
        dict1 = {'TimeSeriesValue': 121.20923188958272}
        dict2 = {'TimeSeriesValue': 121.3}
        self.assertAlmostEqual(dict1['TimeSeriesValue'], dict2['TimeSeriesValue'], 1)

if __name__ == '__main__':
    main()

Хорошо

Для вашего теста это может быть похоже:

# number of decimal places is 0
self.assertAlmostEqual(expected_row['TimeSeriesValue'], first_row[<your key here>], 0)
  • 0
    Спасибо, хотя это работает для одного значения, мне все еще нужно убедиться, что остальные данные равны. Я думаю, я мог бы добавить дополнительные подтверждения для других ключей.
  • 0
    @ user7496931 С удовольствием! Да, это был бы самый простой способ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню