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
を実行できるように、テストコードを書いたファイルのインタプリタを変更します。
【Edit Configurations】を選んで、【+】ボタンから【pytest】を選びます。
次に、【Script Pass】のフォルダアイコンをクリックし、test_calculation.py
を選んで【Open】、【Apply】、【OK】の順でクリックして準備は完了です。
pytestでunittestを実行
準備が整えばすぐにpytest
を実行できるのですが、これまでに学習してきたunittest
のテストもそのままのコードで実行することができます。
test_calculation.py
のインタプリタをpytest
に変更しているので、Pycharmからtest_calculation.py
を実行すれば、unittest
ではなく、pytest
が使われますが、問題なくテストを実行することができます。
pytest
はunittest
をカバーしているということです。
続いて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()
の引数x
とy
に両方とも1
を入れたときの返り値が4
であれば問題がないというテストになります。
3行目の関数の頭にtest_
をつけて、最後にassert
と入れるだけでテストができるので、unittest
に比べるとかなりシンプルなコードになります。
また、判定が==
のように、通常の演算子が使えるので、!=
やin
やnot in
なども使えて、簡単に判別できるのが特徴です。
実行すると、次のように1つのテストをパスしましたという結果が返されます。
次は、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の特徴を持ったテストパッケージなので、コードが非常にシンプルです。
表に出てくるコードがシンプルだということは、それだけ表に出てこない裏の部分で処理がされているということなので、長くプログラミングに関わっている人には少し不安があるかもしれません。
小学校のプログラミング授業なんかは、プログラミングというより、積み木やレゴみたいな感じなので、将来的には、コードを書く部分はAIが担当して、プログラマーは出来上がりをイメージするだけという時代が来るかもしれません。
映画のアイアンマンならAIのジャービスに指示を出すだけで処理をしてくれますから、ほんとプログラムのコードを書くのは、超絶天才の数人だけになるような気がします。
といいつつも自分が生きている時代には、そこまで進化していないと思うので、しっかりとPythonを学習しようと思います。
それでは明日もGood Python!