まーたしばらく記事書いてなかったびっくりだ。筆無精にもほどがある。
さてさて。最近家ではPythonばかりいじっております。
もっぱらDjangoでWebアプリ作成。慣れるとなかなか楽しい。
このPython、海外だとメジャーな言語なんですが日本じゃ非常にマイナーな存在。ぐぬぬ。おかげで日本語の資料が出てこない。ほとんど英語。まぁいいけど…。日本語の「Pythonやろうよ!楽だよ?」って記事が少ないので、ちょっとヨイショ記事を書こうと思います(・∀・)
細かい文法とかすっとばして、いきなりタイトルの内容に入りまーす。
Pythonだと単体テストがもんっのすごく書きやすい。
= いいペースでプログラムを作っていける。
そこにVimも混ぜるとなお素晴らしい。
実例。例えば hoge.py というファイルに関数addを作ります。
[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def add(a, b):
return 0
[/python]
docstring(説明文)もつけちゃいましょう。
[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def add(a, b):
"""引数を足して返す"""
return 0
[/python]
さて、テストしましょう。
他言語と同じようなUnit Testも使えますが、せっかくなのでここはPython特有のdoctestで行きます。
doctestの下準備。ファイル hoge.py の下に数行追加(8〜10行目)。
[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def add(a, b):
"""引数を足して返す"""
return 0
if __name__ == ‘__main__’:
import doctest
doctest.testmod()
[/python]
追加したら、ちょっとPythonの対話シェルから関数を実行してみます。
(対話シェル→コマンドラインで「python」と打つと起動します)
add(1, 3)が実行されて、上に書いた通り、ちゃんと0が返ってますね。
んでは、docstringの中に、対話シェルと同じ形式でテストを書きます。
「>>>」の文字の後に実行したい文を書きます。(下の例 8, 9行目)
その直後の行(10行目)には期待する返り値を書きます。※下の例だと期待する返り値は「4」ですね。
[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def add(a, b):
"""
引数を足して返す
1と3足したら4が返ってくるだろJK
>>> add(1, 3)
4
"""
return 0
if __name__ == ‘__main__’:
import doctest
doctest.testmod()
[/python]
はい、テストの記述終了。
コマンドラインでこのファイルを実行してみると
さくっとテストが実行されちゃいます。
期待する返り値(Expected)が4のところに0が返ってる(Got)のでFailedになってますね。
add()を書き直します。
[python]
def add(a, b):
""" 引数を足して返す
1と3足したら4が返ってくるだろJK
>>> add(1, 3)
4
"""
return a + b
[/python]
OK、テストだ。
あれ何も表示されない…?
というのは実は正常で、テストにパスすると何も表示されません。
実行結果を見るには -v オプションをつけて実行します。
$ python hoge.py -v
vオプションをつけるとこんな具合に、実行結果詳細つきでテスト結果を見ることができます。
慣れたらテストをガシガシ追加していきましょう。
[python]
def add(a, b):
""" 引数を足して返す
1と3足したら4が返ってくるだろJK
>>> add(1, 3)
4
他の数字でテスト
>>> add(5, 2)
7
文字でテスト
>>> add(‘a’, ‘b’)
‘ab’
比較テスト
>>> a = add(1, 1)
>>> a == 2
True
"""
return a + b
[/python]
テスト実行。
こんな感じで、処理記述、テスト、処理記述、テストと、順番にスルスルと組み立てていくことができます。
Vimを使っている方なら、わざわざターミナル(or コマンドプロンプト)に切り替えなくても
:! python hoge.py -v
と打てばVim内でテスト実行、テスト結果を見ることができますね(・∀・)!
↓
テストの流れはこんな感じです。
doctestは基本的に簡単な比較テストしかできないし、テストが多すぎると逆に視認性が落ちる…というデメリットはありますが、この「テストの手軽さ、素早さ」はものすごく気持ちいいですよ。安心感も得られますしね。それにDjangoなどのフレームワークと組み合わせると、Webアプリをスンスンスーン♪と作っていけます。便利!
どうでしょう?ちょっとPython使ってみたくなりました?Djangoなどをつっこめるレンタルサーバーは数少ないですが、機会があったら是非使ってみて下さいね(。・∀・)ノ
というわけで、Python楽しいよ?というお話でした。さて、アプリの続き作ろうっと…。
今回書いたPythonはコチラ→hoge.py
※文字化けする場合は、ブラウザの文字エンコードをUTF-8に変えて下さい