Python実践入門 12章 ユニットテスト
Python標準ライブラリのunittestで大体できる
code: test.py
class BookSearchTest(unittest.TestCase):
def test_booksearch(self):
self.assertEqual({}, booksearch())
実行はpython -m unittest <file名>
もしくはファイルの下記に以下を書くと、python <ファイル名>だけで実行できる
code: test.py
if __name__ == '__main__':
unittest.main()
1つのテスト関数に複数のassertを入れるのは良くない
どこかで失敗したら以後の朝ーとが実行されないので
テストの前処理と後処理が必要な場合, setUp(), setDown()メソッドを利用する
モックもunittestモジュールにあるよ、unittest.mock
code: mock.py
from unittest.mock import Mock
mock = Mock(return_value=3)
mock() # 3を返す,
mock(10) # 3を返す, 引数は影響しない
# 引数に基づいて、簡易な返り値を変えたい場合は、side_effectを使う
mock = Mock(side_effect=lambda x: x * 2)
>> mock(3)
6
>> mock(10)
20
mockがよばれたかどうかも評価できる
既存のオブジェクトの処理をモックで被せるときは、patch()を使う
code: patch.py
class Hoge(unittest.TestCase):
with patch('socket.socket.connect') as mock:
mock.return_value = None
# このブロック内で、socket.socket.connect処理を実行すると、Noneが返る