Unittest-framework-assertion

提供:Dev Guides
移動先:案内検索

UnitTest Framework-アサーション

Pythonテストフレームワークは、特定の条件をテストするPythonの組み込みのassert()関数を使用します。 アサーションが失敗すると、AssertionErrorが発生します。 テストフレームワークは、テストを失敗として識別します。 他の例外はエラーとして扱われます。

次の3セットのアサーション関数は、unittestモジュールで定義されています-

  • 基本的なブールアサート
  • 比較アサート
  • コレクションのアサート

基本的なアサート関数は、操作の結果がTrueまたはFalseであるかどうかを評価します。 すべてのassertメソッドは、指定されている場合、失敗時のエラーメッセージとして使用される msg 引数を受け入れます。

Sr.No. Method & Description
1

assertEqual(arg1, arg2, msg = None)

_arg1_と_arg2_が等しいことをテストします。 値が等しく比較されない場合、テストは失敗します。

2

assertNotEqual(arg1, arg2, msg = None)

_arg1_と_arg2_が等しくないことをテストします。 値が等しい場合、テストは失敗します。

3

assertTrue(expr, msg = None)

_expr_が真であることをテストします。 falseの場合、テストは失敗します

4

assertFalse(expr, msg = None)

_expr_がfalseであることをテストします。 trueの場合、テストは失敗します

5

assertIs(arg1, arg2, msg = None)

_arg1_と_arg2_が同じオブジェクトに評価されることをテストします。

6

assertIsNot(arg1, arg2, msg = None)

_arg1_と_arg2_が同じオブジェクトに評価されないことをテストします。

7

assertIsNone(expr, msg = None)

_expr_がNoneであることをテストします。 Noneでない場合、テストは失敗します

8

assertIsNotNone(expr, msg = None)

_expr_がNoneではないことをテストします。 なしの場合、テストは失敗します

9

assertIn(arg1, arg2, msg = None)

_arg1_が_arg2_にあることをテストします。

10

assertNotIn(arg1, arg2, msg = None)

_arg1_が_arg2_にないことをテストします。

11

assertIsInstance(obj, cls, msg = None)

_obj_が_cls_のインスタンスであることをテストします

12

assertNotIsInstance(obj, cls, msg = None)

_obj_が_cls_のインスタンスではないことをテストします

上記のアサーション関数のいくつかは、次のコードで実装されています-

import unittest

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertEqual(4 + 5,9)
   def test2(self):
      self.assertNotEqual(5 * 2,10)
   def test3(self):
      self.assertTrue(4 + 5 == 9,"The result is False")
   def test4(self):
      self.assertTrue(4 + 5 == 10,"assertion fails")
   def test5(self):
      self.assertIn(3,[1,2,3])
   def test6(self):
      self.assertNotIn(3, range(5))

if __name__ == '__main__':
   unittest.main()

上記のスクリプトを実行すると、test2、test4、test6にエラーが表示され、他のスクリプトは正常に実行されます。

FAIL: test2 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 9, in test2
      self.assertNotEqual(5*2,10)
AssertionError: 10 == 10

FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 13, in test4
      self.assertTrue(4+5==10,"assertion fails")
AssertionError: assertion fails

FAIL: test6 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 17, in test6
      self.assertNotIn(3, range(5))
AssertionError: 3 unexpectedly found in [0, 1, 2, 3, 4]

----------------------------------------------------------------------
Ran 6 tests in 0.001s

FAILED (failures = 3)

アサーション関数の2番目のセットは*比較アサーション-*です

  • assertAlmostEqual (最初、2番目、場所= 7、メッセージ=なし、デルタ=なし) + _first_と_second_がほぼ等しい(またはほぼ等しくない)ことを、差を計算し、指定された10進数_places_の数(デフォルトは7)に丸めてテストします。
  • assertNotAlmostEqual (first、second、places、msg、delta) +差を計算し、指定された小数点以下の桁数(デフォルトは7)に丸め、ゼロと比較して、1番目と2番目がほぼ等しくないことをテストします。 +上記の両方の機能で、場所の代わりにデルタが指定されている場合、1番目と2番目の差はデルタ以下でなければなりません。 +デルタと場所の両方を指定すると、TypeErrorが発生します。
  • assertGreater (最初、2番目、msg =なし) +メソッド名に応じて、_first_が_second_より大きいことをテストします。 そうでない場合、テストは失敗します。
  • assertGreaterEqual (最初、2番目、msg =なし) +メソッド名に応じて、_first_が_second_以上であることをテストします。 そうでない場合、テストは失敗します
  • assertLess (最初、2番目、msg =なし) +メソッド名に応じて、_first_が_second_より小さいことをテストします。 そうでない場合、テストは失敗します
  • assertLessEqual (最初、2番目、msg =なし) +メソッド名に応じて、_first_が_second_以下であることをテストします。 そうでない場合、テストは失敗します。
  • assertRegexpMatches (text、regexp、msg =なし) +正規表現検索がテキストと一致することをテストします。 失敗した場合、エラーメッセージにはパターンとテキストが含まれます。 regexpは、* re.search()*による使用に適した正規表現オブジェクトまたは正規表現を含む文字列です。
  • assertNotRegexpMatches (text、regexp、msg =なし) + _regexp_検索が_text_と一致しないことを確認します。 パターンと一致する_text_の部分を含むエラーメッセージで失敗します。 _regexp_は、正規表現オブジェクトまたはhttps://docs.python.org/2/library/rel#re.search [re.search()]での使用に適した正規表現を含む文字列です。

アサーション機能は、次の例で実装されています-

import unittest
import math
import re

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertAlmostEqual(22.0/7,3.14)
   def test2(self):
      self.assertNotAlmostEqual(10.0/3,3)
   def test3(self):
      self.assertGreater(math.pi,3)
   def test4(self):
      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")

if __name__ == '__main__':
   unittest.main()

上記のスクリプトは、test1とtest4を失敗として報告します。 test1では、22/7の除算が3.14の小数点以下7桁以内にありません。 同様に、2番目の引数は最初の引数のテキストと一致するため、test4はAssertionErrorになります。

=====================================================FAIL: test1 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 7, in test1
      self.assertAlmostEqual(22.0/7,3.14)
AssertionError: 3.142857142857143 != 3.14 within 7 places
================================================================
FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 13, in test4
      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")
AssertionError: Regexp matched: 'Point' matches 'Point' in 'Tutorials Point (I)
Private Limited'
----------------------------------------------------------------------

Ran 4 tests in 0.001s

FAILED (failures = 2)

コレクションのアサート

このアサート関数のセットは、List、Tuple、Dictionary、SetなどのPythonのコレクションデータ型で使用するためのものです。

Sr.No. Method & Description
1

assertListEqual (list1, list2, msg = None)

2つのリストが等しいことをテストします。 そうでない場合は、2つの違いのみを示すエラーメッセージが作成されます。

2

assertTupleEqual (tuple1, tuple2, msg = None)

2つのタプルが等しいことをテストします。 そうでない場合は、2つの違いのみを示すエラーメッセージが作成されます。

3

assertSetEqual (set1, set2, msg = None)

2つのセットが等しいことをテストします。 そうでない場合は、セット間の違いをリストするエラーメッセージが作成されます。

4

assertDictEqual (expected, actual, msg = None)

2つの辞書が等しいことをテストします。 そうでない場合は、辞書の違いを示すエラーメッセージが作成されます。

次の例では、上記のメソッドを実装します-

import unittest

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertListEqual([2,3,4], [1,2,3,4,5])
   def test2(self):
      self.assertTupleEqual((1*2,2*2,3*2), (2,4,6))
   def test3(self):
      self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})

if __name__ == '__main__':
   unittest.main()

上記の例では、test1とtest3はAssertionErrorを示しています。 エラーメッセージには、リストオブジェクトとディクショナリオブジェクトの違いが表示されます。

FAIL: test1 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 5, in test1
      self.assertListEqual([2,3,4], [1,2,3,4,5])
AssertionError: Lists differ: [2, 3, 4] != [1, 2, 3, 4, 5]

First differing element 0:
2
1

Second list contains 2 additional elements.
First extra element 3:
4

- [2, 3, 4]
+ [1, 2, 3, 4, 5]
? +++       +++

FAIL: test3 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 9, in test3
      self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})
AssertionError: {1: 11, 2: 22} != {1: 11, 2: 22, 3: 33}
- {1: 11, 2: 22}
+ {1: 11, 2: 22, 3: 33}
?              +++++++

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures = 2)