Python学習【365日チャレンジ!】199日目のマスターU(@Udemy11)です。
突然のゲリラ雨でビシャビシャになってしまいました。
快晴だったので、ちょっと足を伸ばして散歩に行ったら急に雲行きが怪しくなってきて、やばいな〜と思っていたら、案の定ボツボツ降ってきたと思ったらあっという間に土砂降りになっていました。
普段ならきちんとWeatherNewsで雨雲レーダーを確認してから出かけるのですが、たまたまチェックするのを忘れていたんですよね。
最近は、晴れてたとしてもあっという間に天気が崩れたりするので、出かける前に天候チェックは必須ですね。
それでは、今日もPython学習をはじめましょう。
昨日の復習
昨日は、デコレーターを使わずにmock.patchでテストする方法を学習しました。
with
ステートメントを使う方法と、patcher
を使う方法がありましたが、setup
とteardown
と組み合わせて使うのが一般的な使い方でした。
デコレーターを使わないmock.patchのテストの詳細は、こちらの記事をごらんください。
今日は、関数を使って疑似値を返せるside_effectを学習します。
side_effectの使い方
テストするメインのファイルは昨日までと同じsalary.pyです。
昨日はpatcher
を使ってreturn_value
に値を渡していましたが、side_effect
を使えば関数の返り値を渡すことができます。
import unittest
from unittest import mock
import salary
class TestSalary(unittest.TestCase):
def setUp(self):
self.patcher = mock.patch('salary.BonusApi.bonus_price')
self.mock_bonus = self.patcher.start()
def tearDown(self):
self.patcher.stop()
def test_cal_salary_patch_side_effect(self):
def f(year):
return year * 2
self.mock_bonus.side_effect = f
s = salary.Salary(year=2020)
salary_price = s.cal_salary()
self.assertEqual(salary_price, 4090)
mock_bonus.assert_called()
16行目、17行目で代入する値を関数にして、19行目はreturn_value
だったのをside_effect
に変更して、関数を代入しています。
24行目の値は、ベース給料の50とyear * 2
の4040を足した4090
にしています。
lamdaでも大丈夫
簡単な関数であればlambda
で代用することも可能です。
self.mock_bonus.side_effect = lambda year: year * 2
16行目から19行目までを上記のコードに変えることができます。
lambda
の使い方については、こちらの記事を参考にしてください。
最初の頃に学習したlambda
ですが、すでに忘れかけているかもしれないので、この機会に思い出しておきましょう。
習慣化は難しい?
今日でPython学習を継続して199日になりましたが、感覚的にはまだまだ習慣化できているとはいえないような感じがしています。
というのも、習慣化って無意識にできるようになるってことだと思っているので、まだそこまでのレベルには達していません。
意識して、記事を書こうと思わないとサボってしまう勢いがあるので、気持ちを引き締めて、明日からもPython学習を継続していきたいと思います。
それでは、明日もGood Python!