我正在对一个函数进行单元测试,该函数返回一个非常复杂的数据结构(集合列表列表的字典等)。我手动验证了输出,现在我想确保它不会在我没有注意到的情况下发生变化。
现在我有:
self.assertEquals(data,
{'Instr1': {'COUPON_LIST': '0 % SEMI 30/360',
'LEGAL_ENTITY': 'LE_XS0181523803',
'MATURITY_DATE': '2014/12/31',
'scenarios': {'Base': {'Spread Over Yield': -1.9/100,
'THEO/PV01': -1500.15,
'THEO/Value': 0.333,
'THEO/Yield': 3.3/100},
'UP': {'Spread Over Yield': -2.2/100,
'THEO/PV01': -1000.1,
'THEO/Value': 0.111,
'THEO/Yield': 5.5/100}}},
'Instr2': {'COUPON_LIST': None,
'LEGAL_ENTITY': 'LE_US059512AJ22',
'MATURITY_DATE': '2014/12/31',
'scenarios': {'Base': {'Spread Over Yield': None,
'THEO/PV01': None,
'THEO/Value': 1.0,
'THEO/Yield': 0.0},
'UP': {'Spread Over Yield': None,
'THEO/PV01': -15.15,
'THEO/Value': 4055.344,
'THEO/Yield': 4.4/100}}},
'Instr3': {'COUPON_LIST': '0 % SEMI 30/360',
'LEGAL_ENTITY': 'LE_XS0181523803',
'MATURITY_DATE': '2014/12/31',
'scenarios': {'Base': {'Spread Over Yield': -1.9/100,
'THEO/PV01': -1500.15,
'THEO/Value': 0.333,
'THEO/Yield': 3.3/100},
'UP': {'Spread Over Yield': -2.2/100,
'THEO/PV01': -1000.1,
'THEO/Value': 0.111,
'THEO/Yield': 5.5/100}}},
'Instr4': {'COUPON_LIST': None,
'LEGAL_ENTITY': 'LE_US059512AJ22',
'MATURITY_DATE': '2014/12/31',
'scenarios': {'Base': {'Spread Over Yield': None,
'THEO/PV01': None,
'THEO/Value': 1.0,
'THEO/Yield': 0.0},
'UP': {'Spread Over Yield': None,
'THEO/PV01': -15.15,
'THEO/Value': 4055.344,
'THEO/Yield': 4.4/100}}}}
我有两个问题:
测试类不稳定,数据可能会发生变化。在这种情况下,我想快速查明输出更改的位置,并且只验证差异。例如,我正在寻找一个不错的输出说
数据['Instr1']['MATURITY_DATE']: '2014/12/31' != '31/12/2014'
数据['Instr5']:在 lhs 中找不到节点
但同时我不想手动测试结构的每个节点。
如您所见,有些元素是浮动的,并且 4.4/100 != 0.044。我需要在浮点节点上运行 AssertAlmostEqual 并在其他所有节点上运行 AssertEqual 的逻辑。
有没有这样做的图书馆,还是我必须自己写?