У меня есть следующий код:
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
. Какие-либо предложения?
Вы можете использовать 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)