2015-10-19 2 views
22

サービスにクエリを送信した後、辞書/リストを取得して、それが空でないことを確認したいと思います。私はPython 2.7を使用しています。iterableが空でない場合、Python unittest assertでチェックする方法はありますか?

unittest.TestCaseクラスのインスタンスにはassertEmptyメソッドが表示されません。など

既存の代替案:

self.assertTrue(bool(d)) 

self.assertNotEqual(d,{}) 

self.assertGreater(len(d),0) 

はちょうど見ていません。

Python unittestフレームワークには、この種のメソッドがありませんか?「はい」の場合は、イテレートが空ではないと主張する最も無邪気な方法は何でしょうか?

+1

のhttp:/ /stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty何か助けになるかもしれません。 – CollinD

+0

良いリンク!私はiterableが空であるかどうかをテストする方法を知っています。 assertEmpty/assertNotEmptyメソッドがありません - assertTrueとassertFalseをコードの周りに置くのではなく、読みやすさを向上させるためには... –

+2

「assertTrue」が多分、少し清潔です。私は私の個人的な好み(そしておそらく最も意味的に意味のあるオプション)はlen!= 0をアサートすると思うと思います。私はassertEmpty/assertNotEmptyメソッドがunittestフレームワークの場所を持っていることに同意します。 – CollinD

答えて

39

空のリスト/ dictsはFalseに評価し、そのself.assertTrue(d)は仕事を取得します。

+0

右。したがって、空白をチェックするunittestのメソッドを宣言しませんか? 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

発電機でも機能するので、ライナー1本が最適です。空のiterableをテストしている場合、そのアイテムを見る必要はありません。 –

+0

それは例外をキャッチしません、あなたは関数内に配置する必要があります。 –

4

あなたが探しているものに正確に依存します。

あなたは、オブジェクトが反復可能であることを確認したいし、それが空でない場合は、次の

オブジェクトがためにテストされているため、それがOKであれば
# TypeError: object of type 'NoneType' has no len() 
# if my_iterable is None 
self.assertTrue(len(my_iterable)) 

None

self.assertTrue(my_maybe_iterable) 
関連する問題