我有一个函数返回一个元组,其中包含一个浮点值。通常我使用assertAlmostEquals
比较它们,但这不适用于元组。此外,元组还包含其他数据类型。目前,我正在单独断言元组的每个元素,但这对于此类元组的列表来说太多了。对于这种情况,有什么好的方法来编写断言吗?
考虑这个函数:
def f(a):
return [(1.0/x, x * 2) for x in a]
现在我想为它编写一个测试:
def testF(self):
self.assertEqual(f(range(1,3)), [(1.0, 2), (0.5, 4)])
这将会失败,因为结果是1.0/2
不完全是0.5
。谁能推荐一种以可读的方式编写这样的断言的好方法?
Edit: 实际上1.0/2
正是0.5
,但你明白我的意思。
好吧,用几个拉链来增强你的功能怎么样:
def testF(self):
for tuple1, tuple2 in zip(f(range(1,3)), [(1.0, 2), (0.5, 4)]):
for val1, val2 in zip(tuple1, tuple2):
if type(val2) is float:
self.assertAlmostEquals(val1, val2, 5)
else:
self.assertEquals(val1, val2)
我的前提是,最好在循环中使用多个断言,以便在中断时获得准确的值,而不是使用带有 all() 的单个断言。
附:如果您有其他数字类型想要使用assertAlmostEqual,您可以将上面的if更改为例如if type(val2) in [float, decimal.Decimal]:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)