Python学習【365日チャレンジ!】178日目のマスターU(@Udemy11)です。
雨がふらなくて憂鬱な気分にはならないのですが、真夏日のような暑さに体力が奪われてしまいます。
20年前に比べると、日中平均の気温は変化がないようですが、最高気温は3℃以上も高くなっているようです。
この記事は、2018年の結果ですが、2020年でもそんなに大差はないかと思います。
お家の中で冷房を入れるのを我慢して熱中症になってしまう方もいるので、冷房は体によくないと我慢するのも考えものですね。
それでは、今日もPython学習をはじめましょう。
昨日の復習
昨日は、サードパーティーのテストパッケージであるpytestの基本を学習しました。
unittestの場合は、クラスを使ってテストしましたが、pytestは関数のみでもテスト可能でした。
もちろんクラスの中で関数を定義してテストをすることもでき、unittestで書いたコードもそのままテストすることができましたね。
pytestの基本については、昨日の記事をごらんください。
今日は、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
このコードのテストを実行します。
関数のみで例外テスト
昨日試したように、関数のみの実行でも、クラスオブジェクトを生成してからの実行でもどちらでもテストができるので、まずは関数のみでテストを実行してみます
import pytest
import calculation
def test_add_and_double_raise():
with pytest.raises(ValueError):
cal = calculation.Cal()
cal.add_and_double('1', '1')
今回は、最初にpytest
をインポートします。
6行目で、pytest.raises()
でValueError
を指定して、calculation.py
の関数add_and_double
の変数x
とy
に文字列の1
を代入しています。
calculation.py
では、3行目、4行目で引数が整数以外だった場合にValueError
を定義しているので、文字列を代入するとValueError
が起こります。
テストの実行結果は、ValueError
が起こって正常にテストをクリアして終了します。
クラスオブジェクトで例外テスト
次にクラスを使った例外テストも試してみます。
import pytest
import calculation
class TestCal(object):
def test_add_and_double_raise(self):
with pytest.raises(ValueError):
cal = calculation.Cal()
cal.add_and_double('1', '1')
5行目を追加して、6行目の引数にself
を入れるだけです。
実行結果は関数のとき同様に、ValueError
が返されるので、テストは異常なしで終了します。
例外は注意が必要
例外テストは、例外が起こっているのに正常終了するので、ちょっと注意が必要です。
例外が起こるということが想定のテストなので、例外が起こって当たり前なのですが、気をつけないとどっちがどっちやらわからなくなってしまいます。
たまに別のことを考えながらPythonのコードを書いてると、わけがわからないコードになってしまったり、手が止まったりしてしまいますので、しっかりと注意力を落とさないように集中して学習しないといけません。
誘惑のない環境を整えておくことも重要ですね。
それでは、明日もGood Python!