2015-10-19 34 views
22

向服務提交查詢後,我得到一個字典/列表,並且我想確保它不是空的。我在Python 2.7。有沒有什麼辦法來檢查Python單元測試斷言如果一個迭代不是空的?

我很驚訝我沒有看到任何方法的unittest.TestCase類實例。

如現有的替代品:

self.assertTrue(bool(d)) 

self.assertNotEqual(d,{}) 

self.assertGreater(len(d),0) 

只是不看的權利。

Python單元測試框架中缺少這種方法嗎?如果是,那麼聲稱迭代器不是空的最pythonic方法是什麼?

+1

HTTP:/ /stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty可能會有所幫助。 – CollinD

+0

好鏈接!我知道如何測試迭代器是否爲空;正在尋找具體的單元測試斷言的方法...驚訝沒有assertEmpty/assertNotEmpty方法 - 恕我直言它會提高可讀性很多,而不是assertTrue和assertFalse所有代碼... –

+2

同意,只是認爲'assertTrue'是也許是一個清潔劑。我認爲我的個人偏好(也許是語義上最有意義的選項)將會聲明len!= 0。我同意assertEmpty/assertNotEmpty方法在unittest框架中佔有一席之地。 – CollinD

回答

39

空列表/類型的字典評估爲False,所以self.assertTrue(d)能夠完成任務。

+0

對。那麼在單元測試中沒有會檢查空虛的斷言方法?令人討厭assertTrue和assertFalse代碼全部... –

+0

沒有斷言的方法來檢查空虛 - [unittest](https://docs.python.org/2/library/unittest.html#assert-methods)。 – gplayer

1

可能:

self.assertRaises(StopIteration, next(iterable_object)) 
+2

這在一般情況下並不理想,因爲它可能會消耗一件隨後需要看的物品。 – chepner

+0

最好的班輪,因爲它甚至適用於發電機。如果你正在測試一個空的迭代器,你不需要看它的項目。 –

+0

這不會捕獲異常,您需要將它放入函數中。 –

4

取決於你正在尋找什麼。

如果你想確保對象是可迭代的,它不是空:

# TypeError: object of type 'NoneType' has no len() 
# if my_iterable is None 
self.assertTrue(len(my_iterable)) 

如果它是確定的被測試的對象是None

self.assertTrue(my_maybe_iterable) 
相關問題