2015-10-19 38 views
22

Po przesłaniu zapytań do usługi otrzymuję słownik/listę z powrotem i chcę się upewnić, że nie jest pusta. Jestem na Pythonie 2.7.Czy istnieje sposób sprawdzenia z Python unittest twierdzić, jeśli iterable nie jest pusty?

Jestem zaskoczony, nie widzę żadnej metody assertEmpty dla instancji klasy.

istniejące alternatywy, takie jak:

self.assertTrue(bool(d)) 

i

self.assertNotEqual(d,{}) 

i

self.assertGreater(len(d),0) 

prostu nie wygląda dobrze.

Czy tego typu metoda nie występuje w frameworku Python unittest? Jeśli tak, jaki byłby najbardziej pythonic sposób twierdzić, że iterable nie jest pusty?

+1

http://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty Może być pomocna. – CollinD

+0

Dobry link! Wiem, jak sprawdzić, czy iteracja jest pusta; szukał specjalnie unittest zapewnić metody ... Zaskakujące nie ma metod assertEmpty/assertNotEmpty - imho poprawiłoby to znacznie czytelność, zamiast posiadania assertTrue i assertFalse wokół kodu ... –

+2

Zgoda, po prostu pomyślałem, że 'assertTrue' jest może odrobinę czystszy. Myślę, że moje osobiste preferencje (a może najbardziej znacząca semantycznie opcja) byłoby stwierdzenie len! = 0. Zgadzam się, że metoda assertEmpty/assertNotEmpty ma miejsce w unittestowym środowisku. – CollinD

Odpowiedz

39

pustych list/dicts FALSE, więc self.assertTrue(d) dostaje zadanie.

+0

Dobrze. Więc nie ma żadnych metod w unittest, które sprawdzałyby pustkę? Irytujące mieć assertTrue i assertFalse dookoła kodu ... –

+0

Brak metody sprawdzania pustki - [unittest] (https://docs.python.org/2/library/unittest.html#assert-methods). – gplayer

1

Może:

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

To wcale nie jest idealne, ponieważ może pochłonąć przedmiot, na który trzeba zwrócić uwagę. – chepner

+0

Najlepszy liniowiec, ponieważ działa nawet dla generatorów. Jeśli testujesz pustą wartość iterowalną, nie powinieneś patrzeć na jej elementy. –

+0

To nie będzie miało wyjątku, musisz umieścić go w funkcji. –

4

Zależy dokładnie od tego, czego szukasz.

Jeśli chcesz się upewnić, że obiekt jest iterable i nie jest pusty:

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

Jeśli jest OK dla obiektu testowanego być None:

self.assertTrue(my_maybe_iterable)