はじめに
Pythonはずっと独学でやってきたのですが、最近はどこに行っても恥ずかしくないようにお作法を学び始めています。 その一つがテストのやり方を抑えておこうというものです。 もちろん普段の業務ではテストしていますが、 個人的にPythonでガチャガチャ遊んでいるプログラムでもテストをやってソースコードをきれいに保ちたいと思いました。 今回はその過程で学んだことをまとめておきます。
Pythonでは最初からユニットテストフレームワークが組み込まれているのでunittestを使います。
26.4. unittest — ユニットテストフレームワーク — Python 3.6.5 ドキュメント
ディレクトリ構成
Pythonでは下記のようなテストディレクトリ構成にするのが一般的なようです。
. ├─dir │ └─sample.py └─tests └─test_sample.py
作成したプログラムとテスト用プログラムの2つを見ていきます。 しかし、ここで足し算プログラムなどやっても面白くないので、自分が実際に使ったプログラムで見てみます。
#dir/getHtml.pyの中身 def rtnBS(url): """ htmlを引き渡し、bsObjを返す """ html = urllib.request.urlopen(url) bsObj = BeautifulSoup(html, "html.parser") return bsObj
テスト実行のコマンド
#tests/test_getHtml.pyの中身 import unittest from bs4 import BeautifulSoup from dir.getHtml import rtnBS class TestSample(unittest.TestCase): def test_rtnBS(self): url = 'https://www.yahoo.co.jp/' bsObj = rtnBS(url) beautifulsoup = BeautifulSoup() self.assertEqual(type(bsObj),type(beautifulsoup))
これはself.assertEqualで、取得したオブジェクトがbeautifulsoupかどうかをチェックしています。
実行する際のコマンドはtests/test_getHtml.pyです。
python -m unittest tests/test_getHtml.py
補足ですがdiscover tests
に変更するとtestsディレクトリ配下のすべてのテストを実行できます。多くのテストケースを作った際はこちらに切り替えるべきでしょう
python -m unittest discover tests