Pythonでpytestを実行する

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

庭の木が伸び放題だったので、気合を入れて剪定したら、かなりスッキリしたのですが、枝を切りすぎてあとの処理が大変でした。

結構太い枝も切ったので、そのままではゴミに出すことができず、小さくカットする作業がもう大変!

大きい剪定ばさみでカットしつつ、太くて切れない枝は、のこぎりで切ったので、握力がほぼ0状態に。。。

若干かがみぎみで作業をしていたので、腰が痛くなってしまいました。
年には勝てませんね。

ちなみに「年には勝てないね」を英語でいうと、

I can’t help getting old.

英会話で、こういう表現を普通にできるようになりたいですね。

それでは、今日もPython学習をはじめましょう。

昨日の復習

昨日は、unittestのテストをスキップする方法を学習しました。

unittestには、必要に応じてテストをスキップする方法がありました。

ある特定のバージョンでは、不必要なテストをスキップして他のテストを実行するなど、通常必要なテストを記述しておいて、条件によって不必要なテストだけをスキップすることができました。

unittestにおけるテストのスキップの詳細は、昨日の記事をごらんください。

今日は、unittest同様に、テストができるサードパーティーのpytestを学習します。

pytestとは

Pytestは、標準ライブラリのunittestと同じように、コードのテストを実行することができるサードパーティーのテストパッケージです。

unittestは、標準ライブラリなので、必要な機能を備えているのですが、より高度なテストをしたいときにpytestを使います。

また、unittestでは、クラスを使ってオブジェクトを生成しましたが、pytestでは、クラスオブジェクトではなく、関数でもテストを実行することができます。

pytestのインストール

サードパーティーなので、まずはpytestのインストールが必要ですが、AnacondaでPythonをインストールしている場合はすでにインストールされています。

インストールは、いつものようにpipでインストール可能です。

pip install pytest

pytestのインストールが完了すれば、実際にコードを書いていきますが、その前に少し準備があります。

pytestの実行準備

次にPycharmでpytestを実行できるように、テストコードを書いたファイルのインタプリタを変更します。

Pythonでpytestを実行する

【Edit Configurations】を選んで、【+】ボタンから【pytest】を選びます。

Pythonでpytestを実行する

次に、【Script Pass】のフォルダアイコンをクリックし、test_calculation.pyを選んで【Open】、【Apply】、【OK】の順でクリックして準備は完了です。

Pythonでpytestを実行する

pytestでunittestを実行

準備が整えばすぐにpytestを実行できるのですが、これまでに学習してきたunittestのテストもそのままのコードで実行することができます。

test_calculation.pyのインタプリタをpytestに変更しているので、Pycharmからtest_calculation.pyを実行すれば、unittestではなく、pytestが使われますが、問題なくテストを実行することができます。

Pythonでpytestを実行する

pytestunittestをカバーしているということです。

続いてpytestのコードを書いていきましょう。

calculation.py

今回もテストをするためのメインのコードはこれまでと一緒のファイルであるcalculation.pyを使用します。

class Cal(object):
    def add_and_double(self, x, y):
        if type(x) is not int or type(y) is not int:
            raise ValueError
        result = x + y
        result *= 2
        return result

続いて、テストのためのコードを書いていきましょう。

関数でpytest

まずは、pytestで関数を使ったテストコードを書いてみます。

import calculation

def test_add_and_double():
    cal = calculation.Cal()
    assert cal.add_and_double(1, 1) == 4

インポートするのはテストするメインのファイルcalculation.pyのみです。

関数add_and_double()の引数xyに両方とも1を入れたときの返り値が4であれば問題がないというテストになります。

3行目の関数の頭にtest_をつけて、最後にassertと入れるだけでテストができるので、unittestに比べるとかなりシンプルなコードになります。

また、判定が==のように、通常の演算子が使えるので、!=innot inなども使えて、簡単に判別できるのが特徴です。

実行すると、次のように1つのテストをパスしましたという結果が返されます。

Pythonでpytestを実行する

次は、classを使って同じテストをしてみます。

classでpytest

クラスオブジェクトを使う場合は、classのあとの名前をTestに続けて記述します。

import calculation

class TestCal(object):
    def test_add_and_double(self):
        cal = calculation.Cal()
        assert cal.add_and_double(1, 1) == 4

クラスを定義したあとは、先程の関数と同じように記載しますが、クラス内の関数となるので、引数にselfを指定します。

実行結果は先程の関数のテスト結果と同様の結果になります。

Pythonでpytestを実行する

コードが単純に

他のプログラミング言語に比べてコードが非常にシンプルになるのがPythonの特徴です。

pytestはそんなPythonの特徴を持ったテストパッケージなので、コードが非常にシンプルです。

表に出てくるコードがシンプルだということは、それだけ表に出てこない裏の部分で処理がされているということなので、長くプログラミングに関わっている人には少し不安があるかもしれません。

小学校のプログラミング授業なんかは、プログラミングというより、積み木やレゴみたいな感じなので、将来的には、コードを書く部分はAIが担当して、プログラマーは出来上がりをイメージするだけという時代が来るかもしれません。

映画のアイアンマンならAIのジャービスに指示を出すだけで処理をしてくれますから、ほんとプログラムのコードを書くのは、超絶天才の数人だけになるような気がします。

といいつつも自分が生きている時代には、そこまで進化していないと思うので、しっかりとPythonを学習しようと思います。

それでは明日もGood Python!