为什么
上面的测试即使应该失败也会通过。代码中缺少一个应该被捕获的错误。
我们应该如何断言该值确实为“False”,而不仅仅是布尔上下文中的false?例如:
assertFalse
在 None
上成功呢?import unittest
class TestNoneIsFalse(unittest.TestCase):
def test_none_is_false(self):
self.assertFalse(None)
结果:
> python -m unittest temp
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
看起来这种行为会引发函数不总是返回值的错误。例如:
def is_lower_than_5(x):
if x < 5:
return True
elif x > 5:
return False
....
def test_5_is_not_lower_than_5(self):
self.assertFalse(is_lower_than_5(5))
上面的测试即使应该失败也会通过。代码中缺少一个应该被捕获的错误。
我们应该如何断言该值确实为“False”,而不仅仅是布尔上下文中的false?例如:
self.assertEquals(False, None) # assert fails. good!
x
是 5,它应该返回False
,因为 5 不小于 5。 - chepnerassertIs(... False)
来发现这个 bug。使用assertFalse
测试是通过的。 - icedtreescmp
),然后使用assertEqual
、assertLess
和assertGreater
。 - chepnerif it_lower_than_five(number):
,由于None
是假值,正确的行为将会发生。如果你真的需要返回值实际上是True
或False
,那么你应该在测试中更加具体。 - jonrsharpeassertIs
更可取,以防止未来由于缺少x == 5
导致的可能维护问题。 - icedtrees