鉄は熱いうちに打て

関数のreturnが変なコード

12月は毎日書くぞー!と思って、10日分を残して早30日。いやー、12月は早かった!

ということで、残りの日付は今年の振り返りと小ネタで埋めていきます。

今日は私がコードレビューでよく指摘される話。

TogglとSlackを連携した話のコードも最初、こうなっていました。

def get_toggl():
    〜略〜
    if current.status_code != 200:
        print("togglの情報取得に失敗しました")
    else:
        current_json = current.json()
        if current_json['data'

pytestを使ってみる

今日の内容は、Pythonでテストしたいにまとめている内容の詳細部分です。

unittestより高度な機能を提供するpytestを使ってみます。

公式ドキュメント は、これかな?

本もありますね。これ、日本語訳本でるのかなぁ?出そうだなぁ。と思っているので、英語版を買おうかどうか迷っています。誰か教えて。結構いいお値段なんですよね。

インストール

サードパーティー製なのでインストールが必要です。

$ pip install pytest

テストしてみよう

まずはunittestと同じテストをしてみます。

なにも継承しないで、

unittest.mock.patchを使ってみる(コンテキストマネージャ)

今日の内容は、Pythonでテストしたいにまとめている内容の詳細部分です。

unittest.mock.patch(コンテキストマネージャ)を使ってみます。

sample_method.py

sample_methodを読み込んでテストする

意味がないテストになっていますが、 with patch('sample_method.SampleMethod.method_1') as mock_method_1: と書いて、 mock_method_1.return_value = 'AAA' と書くことで、 SampleMethod.method_1

unittest.mock.patchを使ってみる(デコレータ)

今日の内容は、Pythonでテストしたいにまとめている内容の詳細部分です。

unittest.mock.patch(デコレータ)を使ってみます。

sample_method.py

sample_methodを読み込んでテストする

意味がないテストになっていますが、 @patch('sample_method.SampleMethod.method_1') と書いて、引数の最後に mock_method_1 を追加すると、 mock_method_1.return_value = 'AAA' と書くことで、 SampleMethod.method_1

unittest.mock.MagicMockを使ってみる

今日の内容は、Pythonでテストしたいにまとめている内容の詳細部分です。

unittest.mock.MagicMockを使ってみます。

20行目の self.sample.method_1 = MagicMock(return_value='AAA') この部分で、 method_1 の戻り値を 'method_1' から 'AAA' に変更しています。

本来は通信結果返す、データベースの結果を返すメソッドに実際は通信しなくても結果を返してテストできるように使うようです。

公式ドキュメントもどうぞ。