はじめに
前回の記事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 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 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)
|
通常は小数第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)
|
差分(delta
)を指定することも可能
1 2 3
| class TestMethods(unittest.TestCase): def test_assert_almost_equal(self): self.assertAlmostEqual(100, 102, delta=3)
|
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 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日