python楽しいよ? (python+doctest+vim=ヒャッハー)


まーたしばらく記事書いてなかったびっくりだ。筆無精にもほどがある。

さてさて。最近家では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]
はい、テストの記述終了。
コマンドラインでこのファイルを実行してみると

$ python hoge.py

さくっとテストが実行されちゃいます。
期待する返り値(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に変えて下さい

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください