Pythonのテストができるnose

Python学習【365日チャレンジ!】187日目のマスターU(@Udemy11)です。

うだるような暑さとはまさに最近の天候のことだといえるくらい暑すぎな日々が続いています。

私の記憶が確かなら、昨年は、朝から晩まで一日中エアコンをつけっぱなしにしたことはなかったのですが、今年はお盆の間中、エアコンをつけっぱなしにしてしまうくらいとんでもない暑さになっています。

電気代がどのくらいになるのか恐ろしいのですが、それよりもエアコンを付けずに熱中症で倒れるほうが怖いので、今月の電気代は目をつぶることにします。

それでは、快適な温度の中で、今日もPython学習をはじめましょう!

昨日の復習

昨日は、テストのカバー率について許容範囲について学習しました。

カバー率は100%が望ましいわけですが、費用とのトレードオフで80%程度が妥協点あたりでした。

すべてのコードをテストする必要があるわけでなない場合もあり、テストが不要なコードもあるということでしたね。

詳しくは昨日の記事をごらんください。

今日は、pytest同様にテストができる【nose】についてさらっと学習します。

noseとは

nose extends unittest to make testing easier.

これは、noseのドキュメンテーションの見出し文です。

pytestと同じように、unittestをさらに拡張したテストができて、それを簡単にできるテストプラットフォームです。

他のパッケージ同様にpip install noseで簡単にインストールできます。

ほんとpipって便利ですよね。

pytestと似ている?

noseは、基本的にpytestと使い方が似ているので、pytestをマスターしていれば、noseも比較的簡単にマスターすることができます。

言ってみれば、イタリア語がわかればポルトガル語がわかるという感じ。

もう少しわかりやすく表現すると、日本語の標準語がわかれば関西弁がわかるみたいなものですね。

noseのドキュメンテーションから一例をみてみましょう。

setupとteardown

noseのドキュメンテーションに記載されている使用例が少ないので、わかりやすいsetupteardownの例をみてみましょう。

def setup_func():
    "set up test fixtures"

def teardown_func():
    "tear down test fixtures"

@with_setup(setup_func, teardown_func)
def test():
    "test ..."

使用例をみるとpytestでは、setup_methodやデコレーターを使ってsetup_classと使っていたものがsetup_funcという記述に変わって、テスト関数の前に@with_setup(setup_func, teardown_func)が加えられています。

実際にこれまでのテストの一部を使ってテストを実行してみます。

calculation.py

テストするメインファイルは、calculation.pyにして、これまでと同じコードにします。

class Cal(object):
    def add_and_double(self, x, y):
        result = x + y
        result *= 2
        return result

test_cal.py

テストファイルは、新しくtest_cal.pyを作成します。

from nose.tools import with_setup

import calculation

def setup_func():
    print('start')

def teardown_func():
    print('finish')

@with_setup(setup_func, teardown_func)
def test():
    cal = calculation.Cal()
    assert cal.add_and_double(1, 3) == 8

最初にnose.toolsからwith_setupをインポートします。

あとは、使用例に従ってコードを書いてみました。

テスト結果

Pythonのテストができるnose

テストが実行されて、最初と最後にstartfinishが出力されています。

テストの最初と最後に出力されているかどうかを確認するには、test_cal.pyの13行目と14行目の間にprint('test')を追加すれば、startfinishの間にtestが出力されるので、試してみてください。

まずは基本を

私がPythonを学習している酒井さんの講座では、まずunittestをマスターしてからpytestをマスターするようにすれば、テストについてはカバーできるといっていました。

Udemy講師 酒井さん プログラミング Python

まずは基本的なテストをマスターしておけば、他のテストツールを使うときにスムーズに理解することができます。

野球をしていた人はソフトボールも普通にできるのと同じで、使ったことがなかったとしても、基礎基本が同じであれば、ポイントやコツが分かるということですね。

そのためには、Python学習の継続が必要ですので、日々の学習を頑張りましょう。

それでは、明日もGood Python!