質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

1171閲覧

PythonのMockについて

silk_

総合スコア17

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/02/26 01:01

編集2020/02/26 01:14

python

1 2import unittest 3from unittest import mock 4 5from expires import get_expires_at 6 7 8class TestExpiresAt(unittest.TestCase): 9 @mock.patch('expires.time') 10 def test_get_default(self,m): 11 m.return_value = 1470620400 12 actual = get_expires_at() 13 self.assertEqual(actual,1470624000) 14 15 @mock.patch('expires.time') 16 def test_get(self,m): 17 m.return_value = 1470620400 18 actual = get_expires_at(7200) 19 self.assertEqual(actual,1470627600) 20# expires.py 21from time import time 22 23 24def get_expires_at(expires_in=3600): 25 """ 有効期限 expires_in (秒) を受け取り、無効になる時刻をエポックタイムで返す 26 """ 27 return time() + expires_in 28

mockの使い所がよく理解できず困っています
またどうしてmock.patchはこのようにデコレータにする必要があるんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2020/02/26 01:06

mockをimportしている部分が書いてあるといいですね。もしくは"なんのパッケージの"mockなのか明に書いてください。 "PyQで只今勉強中なのですが、"はまったく不要です。混乱しか生みません。
silk_

2020/02/26 01:16

import文の明記と、mock_pathを当てた部分のコードを追加しました
guest

回答2

0

ありがとうございました!
参考になりました!

投稿2020/02/28 03:19

silk_

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

mockは必ずしもデコレータする必要はありません。
mockをデコレータすることで、デコレータされたメソッド内でコールする際にmockが呼び出されることになります。
サンプルコードですと、test_get_default()内の処理で呼び出すexpires.timeをmock化する、ということになります。

以下のようにpatch()を使用してmockの開始(start)・終了(stop)を行うことも可能です。※setUptearDownはtestメソッドの最初と最後に呼び出されるメソッドです。

python

1 def setUp(self): 2 3 # mockを定義 4 self.patch_sample = patch( 5 'expires.time', new=MagicMock() 6 # mockを開始 7 self.patch_sample.start() 8 9 def tearDown(self): 10 11 # mockを終了 12 self.patch_sample.stop() 13 14 def test_get_default(self,m): 15 # テストコードを実装 16 # test_get_default()実行前に`setUp`が行われ、実行後に`tearDwon`が行われる。

また、withを使用して範囲的にmockを使用することも可能です。

python

1 def test_get_default(self,m): 2 3 with patch('expires.time'): 4 # テストコードを実装 5

pythonのmockについては以下のサイトが参考になると思います。

投稿2020/02/28 02:41

hmtk715

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問