Pythonのアサーション:自動テストにおける一般的な使用方法

Pythonの自動テストでは、要素を見つけて操作するだけでなく、期待される結果を判断するためのアサーションも重要です。ここでは、一般的に使用されるアサーションメソッドをいくつか紹介します。

  • 基本的なアサーション ===

  • assertEqual

  • assertNotEqual

  • assertTrue

  • assertFalse

  • assertIsNone

  • assertIsNotNone

  • assertEqualとassertNotEqual ============================

  • assertEqual:2つの値が等しい場合、テストは成功します

  • assertNotEqual:2つの値が等しくない場合、テストは成功します

  • 使用方法: assertEqual(期待値, 実際値, メッセージ)期待値と実際値を比較し、等しい場合はテストが通過します。メッセージはオプションで、失敗時に表示される情報です。assertNotEqualは逆のロジックを使用します。

  • assertTrueとassertFalse ======================

  • assertTrue:ブール値がTrueの場合、テストは成功します

  • assertFalse:ブール値がFalseの場合、テストは成功します

  • 使用方法: assertTrue(式, メッセージ)式が真の場合、テストが通過します。メッセージはオプションです。assertFalseは式が偽の場合にテストが通過します。

  • assertIsNoneとassertIsNotNone ============================

  • assertIsNone:値がNoneの場合、テストは成功します

  • assertIsNotNone:値がNoneでない場合、テストは成功します

  • 使用方法: assertIsNone(オブジェクト, メッセージ)特定の要素が存在しないことを確認します。

  • まとめ: ===

  • 一般的なアサーション

assertEqual(a, b)     a == b      
assertNotEqual(a, b)     a != b      
assertTrue(x)     bool(x) is True      
assertFalse(x)     bool(x) is False      
assertIs(a, b)     a is b     2.7
assertIsNot(a, b)     a is not b     2.7
assertIsNone(x)     x is None     2.7
assertIsNotNone(x)     x is not None     2.7
assertIn(a, b)     a in b     2.7
assertNotIn(a, b)     a not in b     2.7
assertIsInstance(a, b)     isinstance(a, b)     2.7
assertNotIsInstance(a, b)     not isinstance(a, b)     2.7
  • その他のアサーション
assertAlmostEqual(a, b)     round(a-b, 7) == 0      
assertNotAlmostEqual(a, b)     round(a-b, 7) != 0      
assertGreater(a, b)     a > b     2.7
assertGreaterEqual(a, b)     a >= b     2.7
assertLess(a, b)     a < b     2.7
assertLessEqual(a, b)     a <= b     2.7
assertRegexpMatches(s, re)     regex.search(s)     2.7
assertNotRegexpMatches(s, re)     not regex.search(s)     2.7
assertItemsEqual(a, b)     sorted(a) == sorted(b) and works with unhashable objs     2.7
assertDictContainsSubset(a, b)     all the key/value pairs in a exist in b     2.7
assertMultiLineEqual(a, b)     strings     2.7
assertSequenceEqual(a, b)     sequences     2.7
assertListEqual(a, b)     lists     2.7
assertTupleEqual(a, b)     tuples     2.7
assertSetEqual(a, b)     sets or frozensets     2.7
assertDictEqual(a, b)     dicts     2.7
  • アサーションの使用シナリオ: =====

アサーションはどのような場合に使用すべきでしょうか?特別な目的がない限り、アサーションは以下の状況で使用するべきです:

  • 防御的プログラミング

  • 実行時のプログラムロジックの検証

  • 契約チェック(事前条件、事後条件)

  • プログラム内の定数

  • ドキュメントの検証

  • 例:防御的プログラミングにおけるアサーションの使用 コードの先頭にコメントを追加することは良い習慣ですが、人々はコメントを読んだり更新したりするのが好きではありません。これらのコメントはすぐに時代遅れになります。しかし、アサーションを使用すれば、コードのドキュメントを同時に作成できます。もしアサーションが破られた場合、シンプルで直接的な失敗を引き起こします。

assert target in (option1, option2, option3)
if target == option1:
    execute_option1_code()
elif target == option2:
    execute_option2_code()
else:
    assert target == option3
    execute_option3_code()

タグ: Python アサーション 自動テスト unittest テスト駆動開発

6月4日 18:54 投稿