サービスにクエリを送信した後、辞書/リストを取得し、空でないことを確認したいと思います。私はPython 2.7を使用しています。
unittest.TestCase
クラスインスタンスのassertEmpty
メソッドが表示されないことに驚いています。
次のような既存の代替手段:
self.assertTrue(bool(d))
そして
self.assertNotEqual(d,{})
そして
self.assertGreater(len(d),0)
正しく見えません。
この種のメソッドはPython unittestフレームワークにありませんか?はいの場合、iterableが空でないと断言する最もPython的な方法は何でしょうか?
空のリスト/辞書はFalseと評価されるため、self.assertTrue(d)
は仕事を完了します。
探しているものによって異なります。
オブジェクトが反復可能であり、空でないことを確認する場合:
# TypeError: object of type 'NoneType' has no len()
# if my_iterable is None
self.assertTrue(len(my_iterable))
テスト対象のオブジェクトがNone
であっても問題ない場合:
self.assertTrue(my_maybe_iterable)
@gplayerで既に述べたように、assertTrue()
で空でないことをチェックすることができます(もちろん、空の場合はassertFalse()
でその逆も可能です)。
しかし、@ Alex Tereshenkovが以前コメントで指摘したように、これらのすべてのassertTrue()
およびassertFalse()
メソッド呼び出しはコードを乱雑にし、空をチェックしたかったために誤解を招く恐れがあります。
したがって、コードを簡潔にするために、独自のassertEmpty()
およびassertNotEmpty()
メソッドを定義できます。
def assertEmpty(self, obj):
self.assertFalse(obj)
def assertNotEmpty(self, obj):
self.assertTrue(obj)
多分:
self.assertRaises(StopIteration, next(iterable_object))
これのすべての功績はwinklerrrにあります。私は彼のアイデアを拡張しているだけです。
class AssertEmptyMixin( object ):
def assertEmpty(self, obj):
self.assertFalse(obj)
class AssertNotEmptyMixin( object ):
def assertNotEmpty(self, obj):
self.assertTrue(obj)
警告、ミックスインは左に行く必要があります:
class MyThoroughTests( AssertNotEmptyMixin, TestCase ):
def test_my_code( self ):
...
self.assertNotEmpty( something )