Python: 単体テスト - ikymrkw/pydepot GitHub Wiki
基本: 標準 unittest
https://docs.python.org/ja/3/library/unittest.html
import unittest
class TestHoge(unittest.TestCase):
def test_foo(self):
expected = 10
actual = hoge.foo(2, 3)
self.assertEqual(expected, actual)
if __name__ == "__main__":
unittest.main()
上記のコードがファイル test_bar.py に保存されているなら、python test_bar.pyで実行できる。
またモジュールとして python -m unittest test_bar と実行することもできる
(この場合 main を実行する部分は不要)。
PyTest
PyTest は標準ライブラリではないが、標準の unittest より優れていると言われている。
pip install pytest
pytest [options] [対象のファイルかディレクトリ] [対象の...] [...]
対象を指定しなければカレントディレクトリが対象となる。
ファイルを指定した場合、そのpyファイルたちのみが対象となる。
ディレクトリを指定した場合、デフォルトではその場所およびその下のすべてのディレクトリにある test で始まる py ファイルがすべて対象になる。
選ばれた py ファイルのグローバルにある、 test_ で始まる関数がテスト単位と見なされ、実行される。
テスト関数は特別な書き方をする必要はなく、動作が正しいかどうかは assert で検査すればよい。(unittest のように既定のクラスや関数を使う必要がない。) 何も import する必要はなく、pytest なしで実行してもテストとして成り立つ(main 部分は書く必要があるが)。
pytest -s とすると、テストコードからの標準出力が表示されるようになる。-sがないと pytest にキャプチャされるので表示されない。