Python test入門 その3

はじめに

前回の記事Python test入門 その2に引き続き、Pythonのテストについて、標準ライブラリであるunittestを使って学んでいきます。

今回も公式リファレンスのコードを引用しながら、解説をしていきます。

解説

例外のテスト

正しく例外が発生しているかをテストしたい場合は、assertRaisesを使う。

コンテキストマネージャーとして使う

1
2
3
4
5
6
7
8
9
10
11
12
import unittest

def some_func():
raise ValueError

class TestMethods(unittest.TestCase):
def test_assert_raises(self):
with self.assertRaises(ValueError):
some_func()

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

下記のように異なる例外が発生すると失敗する。

1
2
3
4
5
6
7
8
9
10
11
12
import unittest

def some_func():
raise ArithmeticError

class TestMethods(unittest.TestCase):
def test_assert_raises(self):
with self.assertRaises(ValueError):
some_func()

if __name__ == '__main__':
unittest.main()
1
FAILED (errors=1)

関数を渡す

以下のような記述も可能。

1
2
3
class TestMethods(unittest.TestCase):
def test_assert_raises(self):
self.assertRaises(ValueError, some_func)

類似するメソッド

例外、警告、およびログメッセージの発生をテストするメソッドは、今回紹介したassertRaisesを含めて6パターン用意されています。

1
2
3
4
5
assertRaises
assertRaisesRegex
assertWarns
assertWarnsRegex
assertLogs

その他のメソッド

その他には以下のようなメソッドがあります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
assertAlmostEqual
assertNotAlmostEqual
assertGreater
assertGreaterEqual
assertLess
assertLessEqual
assertRegex
assertNotRegex
assertCountEqual
assertMultiLineEqual
assertSequenceEqual
assertListEqual
assertTupleEqual
assertSetEqual
assertDictEqual

一部を紹介します。

assertAlmostEqual

ほぼ等しいかどうかをテストします。

1
2
3
class TestMethods(unittest.TestCase):
def test_assert_almost_equal(self):
self.assertAlmostEqual(5 + 2e-8, 5 + 1e-8)
1
OK

通常は小数第7位まで丸めた差分で評価するが、placesで指定も可能

1
2
3
class TestMethods(unittest.TestCase):
def test_assert_almost_equal(self):
self.assertAlmostEqual(5 + 2e-7, 5 + 1e-7, places=6)
1
OK

差分(delta)を指定することも可能

1
2
3
class TestMethods(unittest.TestCase):
def test_assert_almost_equal(self):
self.assertAlmostEqual(100, 102, delta=3)
1
OK

assertListEqual

リストが等しいかをテストします。

1
2
3
4
5
class TestMethods(unittest.TestCase):
def test_assert_list_equal(self):
a = [2, 3]
b = [2, 3]
self.assertListEqual(a, b)
1
OK

順序も等しい必要があります。

1
2
3
4
5
class TestMethods(unittest.TestCase):
def test_assert_list_equal(self):
a = [3, 2]
b = [2, 3]
self.assertListEqual(a, b)
1
2
3
4
5
6
7
8
9
10
11
12
13
AssertionError: Lists differ: [3, 2] != [2, 3]

First differing element 0:
3
2

- [3, 2]
+ [2, 3]

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)

まとめ

これでunittestの解説を終わりにしたいと思います。

この記事でunittestの概要だけでも理解いただけたのであれば嬉しいです。

記事情報

  • 投稿日:2020年4月10日
  • 最終更新日:2020年4月10日