Python学習【365日チャレンジ!】187日目のマスターU(@Udemy11)です。
ここ数日釣りに行っていなかったので、どうしても釣りに行きたくなったもののいまいち潮が良くないんだけどな〜と思いつつ、最終的に釣りに行ったのですが、結果は案の定、つるっぱげの丸坊主(1匹も釣れない状態)になっちゃいました。
ほんと潮の流れでこうも変わるものかと改めて実感したわけですが、常夜灯が照らしている水面にはプランクトンがたくさん集まっているようで、豆アジがたくさんいました。
その豆アジも釣ることができないし、少し暗くなった場所でも釣れませんでした。
まー、私の腕がないのも坊主の原因ですが、やっぱり釣りの基本は、
釣れている場所で釣れている釣り方で釣れる魚を釣る
ですね。
それでは、今日もPython学習をはじめましょう。
昨日の復習
昨日は、pytestと同じようにテストができるnoseについて学習しました。
テストの基本的な構造は同じなので、unittestやpytestをマスターしておけば、noseもスムーズに使いこなすことができるということを紹介しました。
基本的にpytestを理解しておけば問題なくテストを実行できますが、クライアントが指定するテストフレームワークを使う必要があるので、プログラマーを仕事にする場合はnoseなども知っておく必要があるでしょう。
noseについては簡単にしか学習しませんでしたが、noseのはじめの一歩として昨日の記事をごらんください。
今日は、setuptoolsでテストを実行する方法を学習します。
jarvisを使う
今回は以前作成した対話アプリJarvisを使って簡単なunittestを実行、配布する方法を学習します。
以前作成したJarvisはこちらの記事を参考にしてください。
setup.py
プログラムをパッケージ化するsetup.py
は、Jarvisを作成した際のものに少し変更を加えます。
from setuptools import setup, find_packages
setup(
name='jarvis',
version='1.0.0',
packages=find_packages(),
package_data={'jarvis':['templates/*.txt']},
url='http://udemyfun.com',
license='Free',
author='MasterU',
author_email='master@udemyfun.com',
description='First package',
test_suits='tests',
)
パッケージ化するフォルダを勝手に見つけてくれるfind_packages
モジュールを使います。
これで、これから作成するテストファイルフォルダも一緒にパッケージ化してくれます。
テストファイルフォルダは、13行目のtest_suits
で指定しているtests
になり、この名前のフォルダを作成して、そこにテストファイルを作ります。
robot.py
今回は、Jarvisの中のrobot.py
のコードをテストします。
このモジュールの中のRobotクラスのname
についてテストを書きます。(本来ならテストするまでもないコードですが、簡単に説明するためにテストしています。)
class Robot(object):
"""ベースクラスのロボット"""
def __init__(self, name=DEFAULT_ROBOT_NAME, user_name=''):
self.name = name ←この名前がきちんと代入されるかをテスト
self.user_name = user_name
パッケージのテストを作成するときは、テストもどのモジュールをテストしているかわかるように、メインのパッケージとテストフォルダの階層を同じにします。
今回作成するテストファイルは、上記のtest_robot.py
になります。
test_robot.py
テストファイルは、name
がきちんと代入されるかという簡単なテストにしています。
import unittest
from jarvis.models import robot
class TestRobot(unittest.TestCase):
def test_robot_init(self):
r = robot.Robot(name='test jarvis')
self.assertEqual(r.name, 'test jarvis')
robot.py
のRobot
クラスのname
にtest jarbis
と入れて、それがきちんと入っているかを確認したテストです。
最近のPython学習で、なんとなくテストも理解できてきたので、「普通はこんなテストは書かないんだろうな〜」と思いつつ、このコードを書きました。
setup.pyでテストを実行
ターミナルからsetup.py
でテストを実行するには、下記のコマンドを実行します。
python setup.py test
このコマンドを実行すれば、test_suits
で指定したtests
フォルダに保存されているテスト(test_robot.py
)が実行されます。
実行結果
テストが問題なくクリアしたことがわかります。
次はsdist
でパッケージ化してみます。
テストファイルも一緒にパッケージ化
パッケージ化するのは、python setup sdist
をターミナルで実行します。
作業プロジェクトフォルダの中にdist
フォルダが作られてtar.gz
ファイルにパッケージが作成されます。
そのファイルを展開するとtests
フォルダもパッケージの中に含まれていることがわかります。
このように、それぞれのモジュールのテストファイルを作成して、パッケージに含めることでクライアントにテストの実行結果も一緒に渡すことができます。
ただ、メインファイルと同じファイル数だけテストが必要になるので、ほんとプログラムをリリースするのってすごいことなんだなと改めて感じました。
千里の道も一歩からというように、コツコツと小さな一歩を積み上げていこうと思います。
それでは明日もGood Python!