2015-10-19 20 views
22

Bir servise sorgular gönderdikten sonra, bir sözlük/liste geri alıyorum ve boş olmadığından emin olmak istiyorum. Python 2.7'deyim.Yinelenen boş değilse Python unittest assert ile kontrol etmenin bir yolu var mı?

unittest.TestCase sınıf örneği için assertEmpty yöntemini göremedim şaşırıyorum. gibi

mevcut alternatifleri:

self.assertTrue(bool(d)) 

ve

self.assertNotEqual(d,{}) 

ve

self.assertGreater(len(d),0) 

sadece doğru görünmüyor.

Bu tür bir yöntem Python'un en zorlu çerçevesinde eksik midir? Evet ise, yinelenebilir bir şeyin boş olmadığını iddia etmenin en pythonik yolu ne olurdu? Belki

+1

http://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty Bazı yardımlar olabilir. – CollinD

+0

İyi bağlantı! Yinelenebilir bir şeyin boş olup olmadığını nasıl test edeceğimi biliyorum; özellikle unestest assert yöntemleri arıyordu ... Orada hiçbir assertEmpty/assertNotEmpty yöntemleri var - it o assertTrue ve assertFalse sahip olmak yerine okunabilirliği artıracak bir çok şey var ... –

+2

Sadece 'assertTrue' olduğunu düşündü Anlaştık belki biraz temiz. Kişisel tercihimin (ve belki de en semantik olarak anlamlı seçeneğin) len olduğunu iddia ediyorum. = 0. Bir assertEmpty/assertNotEmpty yönteminin, doğru olmayan çerçevede bir yeri olduğunu kabul ediyorum. – CollinD

cevap

39

Boş listeleri/dicts False, böylece self.assertTrue(d) işi alır değerlendirir.

+0

Sağ. Öyleyse, boşluğu kontrol edebilecek doğru olmayan yöntemler kullanılmıyor mu? Kodun etrafından assertTrue ve assertFalse sahip olmak can sıkıcı ... –

+0

Boşluğu kontrol etmek için bir iddia yöntemi yok - [en hızlı] (https://docs.python.org/2/library/unittest.html#assert-methods). – gplayer

1

:

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

Genel olarak ideal değildir, çünkü daha sonra bakmak istediğiniz öğeyi tüketebilir. – chepner

+0

En iyi tek astar, jeneratörler için bile çalıştığı için. Boş bir tekrar için test ediyorsanız, öğelerine bakmanıza gerek yok. –

+0

Bu istisnayı yakalayamaz, onu bir işlev içine koymanız gerekir. –

4

Tam olarak aradığın yere bağlı.

Eğer nesne bir iterable olduğundan emin olmak için ve boş değilse:

nesne olması test edilen için sorun yoksa
# TypeError: object of type 'NoneType' has no len() 
# if my_iterable is None 
self.assertTrue(len(my_iterable)) 

None:

self.assertTrue(my_maybe_iterable) 
İlgili konular