Python学習【365日チャレンジ!】174日目のマスターU(@Udemy11)です。
今日は釣具屋で結構な時間を過ごしてしまいました。
長い時間を過ごしたにも関わらず、購入したものは、小物ケースとスナップのみ。
「今持っているタックルをもっと便利に使えるものがないかな〜」
と思いながらうろついていると、知らない間に時間が経ってしまいます。
それでは今日もPython学習をはじめましょう。
昨日の復習
昨日は、unittestについて学習しました。
unittestは、doctestと違ってテスト用のファイルを作成して、テストしました。
assert
を使っていろいろな種類のテストができましたね。
unittestの基本については、昨日の記事をごらんください。
今日は、unittestで例外処理を扱ってみます。
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
値を足してから2乗する関数add_and_double
の引数x
とy
が整数でなかったときにはValueError
が返されます。
昨日同様、このモジュールについてtest_calculation.py
でテストします。
test_calculation.py
今回は例外処理が正確に例外(ValueError)を返すかどうかを確認するので、ValueError
が返される場合に正しく処理できたという結果を返すコードを書いてみます。
import unittest
import calculation
class CalTest(unittest.TestCase):
def test_add_and_double_raise(self):
cal = calculation.Cal()
with self.assertRaises(ValueError):
cal.add_and_double('1', '1')
if __name__ == '__main__':
unittest.main()
7行目までは、6行目の関数の名前に_raise
が付いているだけで昨日のコードと同じです。
8行目、9行目では、with
ステートメントでassertRaises()
を使い、関数cal.add_and_double('1', '1')
を実行したときにValueError
が起こることを想定しています。
実行結果
test_calculation.py
を実行すると、結果は次のようになります。
Ran 1 test in 0.005s
OK
1つのテストを実行して問題がなかったという表示になります。
テストの対象となるモジュールであるcalculation.py
の関数add_and_double()
に引数x
とy
に文字列の1
を入れた場合は、ValueErrorが起こります。
エラーが起こるのが正常なので、正常にエラーが起こってテストが成功したということです。
エラーが正常?
今回は、例外(ValueError)が起こることを想定したテストでした。
エラーなのに、正常というのがちょっとややこしいですが、想定していることが起こるかどうかを確認するのがテストなので、このようなテストもあることを理解しておきましょう。
プログラミングは、たまに頭がこんがらがりそうになることが多いので慣れが必要ですね。
学習すればするほど難しくなってくるのは、英語学習と同じようなものですが、数をこなすしかないのも英語学習と一緒です。
しっかりと数をこなしてPythonのスキルをアップしましょう!
それでは、明日もGood Python!