Ale*_*kov 55 python unit-testing assertions python-2.7 python-unittest
在向服务提交查询后,我得到一个字典/列表,我想确保它不是空的.我在Python 2.7上.
我很惊讶我没有看到类实例的任何assertEmpty
方法unittest.TestCase
.
现有的替代品如:
self.assertTrue(bool(d))
Run Code Online (Sandbox Code Playgroud)
和
self.assertNotEqual(d,{})
Run Code Online (Sandbox Code Playgroud)
和
self.assertGreater(len(d),0)
Run Code Online (Sandbox Code Playgroud)
只是看起来不对劲.
Python unittest框架中是否缺少这种方法?如果是,那么断言迭代不为空的最pythonic方法是什么?
gpl*_*yer 84
空列表/ dicts评估为False,因此self.assertTrue(d)
完成工作.
完全取决于您的需求.
如果要确保对象是可迭代的并且它不为空:
# TypeError: object of type 'NoneType' has no len()
# if my_iterable is None
self.assertTrue(len(my_iterable))
Run Code Online (Sandbox Code Playgroud)
如果被测对象可以None
:
self.assertTrue(my_maybe_iterable)
Run Code Online (Sandbox Code Playgroud)
假(有时写成假)值是在布尔上下文中遇到时被认为是假的值。
根据官方文档,以下内置类型评估为假:
None
和False
.0
, 0.0
, 0j
, Decimal(0)
,Fraction(0, 1)
''
, ()
, []
, {}
, set()
,range(0)
因此,可以检查
assertTrue()
和assertFalse()
。(官方文档有所有可用断言方法的完整列表。)
所有这些assertTrue()
和assertFalse()
调用都是一种误导,因为我们想要检查是否为空,并且需要知道哪些类型评估false
为正确理解测试中发生的事情。
因此,对于干净的代码,也为了更好的可读性,我们可以简单地定义我们自己assertEmpty()
和assertNotEmpty()
方法,像这样:
def assertEmpty(self, obj):
self.assertFalse(obj)
def assertNotEmpty(self, obj):
self.assertTrue(obj)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39875 次 |
最近记录: |