Submit Search
Mock and patch
5 likes
2,516 views
Toru Furukawa
Python mock ライブラリの紹介
Technology
Read more
1 of 26
Download now
Downloaded 10 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
More Related Content
PDF
rrxv6 Build a Riscv xv6 Kernel in Rust.pdf
Yodalee
PDF
インフラチームのリモートワーク
富士通クラウドテクノロジーズ株式会社
PDF
ユーザー情報格納基盤におけるApache Pulsarの利用事例
Yahoo!デベロッパーネットワーク
PDF
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Preferred Networks
PDF
Scapyで作る・解析するパケット
Takaaki Hoyo
PPTX
NET Systems Programming Learned the Hard Way.pptx
petabridge
PDF
AndroidアプリのKotlin移行時に遭遇した問題と対処例
Kenichi Kambara
PPTX
A developers guide to machine learning
Tess Ferrandez
rrxv6 Build a Riscv xv6 Kernel in Rust.pdf
Yodalee
インフラチームのリモートワーク
富士通クラウドテクノロジーズ株式会社
ユーザー情報格納基盤におけるApache Pulsarの利用事例
Yahoo!デベロッパーネットワーク
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版) / TechFeed Experts Night #7 〜 コンテナ技術を語る
Preferred Networks
Scapyで作る・解析するパケット
Takaaki Hoyo
NET Systems Programming Learned the Hard Way.pptx
petabridge
AndroidアプリのKotlin移行時に遭遇した問題と対処例
Kenichi Kambara
A developers guide to machine learning
Tess Ferrandez
What's hot
(8)
PDF
NGINX App Protect for Secure Coding Webinar
NGINX, Inc.
PPTX
VPP事始め
npsg
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
PDF
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
PDF
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
NTT DATA Technology & Innovation
PPTX
Guide: How to Build OpenCV 3.0.0
André Moreira
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
NTT DATA Technology & Innovation
PDF
100人100通りの働き方を支えるサイボウズ流情報システム部門の在り方
ao Tetsu
NGINX App Protect for Secure Coding Webinar
NGINX, Inc.
VPP事始め
npsg
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
Grafana Lokiの Docker Logging Driver入門 (Docker Meetup Tokyo #34, 2020/01/16)
NTT DATA Technology & Innovation
Guide: How to Build OpenCV 3.0.0
André Moreira
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
NTT DATA Technology & Innovation
100人100通りの働き方を支えるサイボウズ流情報システム部門の在り方
ao Tetsu
Ad
Similar to Mock and patch
(20)
PDF
Ekmett勉強会発表資料
時響 逢坂
PDF
Unit test in android
Tatsuya Maki
PPTX
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
ManamiMaeda
PDF
勉強会force#4 Chatter Integration
Kazuki Nakajima
ODP
Ekmett勉強会発表資料
時響 逢坂
PDF
Pythonで始めるDropboxAPI
Daisuke Igarashi
PDF
Ansible入門...?
shirou wakayama
PDF
Subprocess no susume
Makoto Kishimoto
PDF
Pyramid入門
Atsushi Odagiri
PDF
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
PDF
Ruby test double
Naotoshi Seo
KEY
Applicative functor
Yuichi Adachi
PDF
Local php-100828 2
Akio Ishida
PDF
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
PDF
研究生のためのC++ no.2
Tomohiro Namba
PDF
Continuation with Boost.Context
Akira Takahashi
PDF
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
PPTX
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
Fujio Kojima
KEY
Perl 非同期プログラミング
lestrrat
PPT
Task
Shingo Nakamura
Ekmett勉強会発表資料
時響 逢坂
Unit test in android
Tatsuya Maki
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
ManamiMaeda
勉強会force#4 Chatter Integration
Kazuki Nakajima
Ekmett勉強会発表資料
時響 逢坂
Pythonで始めるDropboxAPI
Daisuke Igarashi
Ansible入門...?
shirou wakayama
Subprocess no susume
Makoto Kishimoto
Pyramid入門
Atsushi Odagiri
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
Ruby test double
Naotoshi Seo
Applicative functor
Yuichi Adachi
Local php-100828 2
Akio Ishida
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
研究生のためのC++ no.2
Tomohiro Namba
Continuation with Boost.Context
Akira Takahashi
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
Fujio Kojima
Perl 非同期プログラミング
lestrrat
Task
Shingo Nakamura
Ad
More from Toru Furukawa
(11)
PDF
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Toru Furukawa
PDF
My client wanted their apps synced, and I made it with Go
Toru Furukawa
PPTX
Introduction to Python 3.4 as of beta 1
Toru Furukawa
PDF
Test Failed, Then...
Toru Furukawa
PDF
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
PDF
Trying Continuous Delivery - pyconjp 2012
Toru Furukawa
KEY
Python 3.3 チラ見
Toru Furukawa
PDF
Python32 pyhackathon-201011
Toru Furukawa
PDF
Django
Toru Furukawa
PPTX
Python 2.7
Toru Furukawa
PDF
BPStudy#34 導入
Toru Furukawa
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Toru Furukawa
My client wanted their apps synced, and I made it with Go
Toru Furukawa
Introduction to Python 3.4 as of beta 1
Toru Furukawa
Test Failed, Then...
Toru Furukawa
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
Trying Continuous Delivery - pyconjp 2012
Toru Furukawa
Python 3.3 チラ見
Toru Furukawa
Python32 pyhackathon-201011
Toru Furukawa
Django
Toru Furukawa
Python 2.7
Toru Furukawa
BPStudy#34 導入
Toru Furukawa
Mock and patch
1.
Mock と patch
ふるかわとおる
2.
お前、誰よ? • ふるかわとおる
– @torufurukawa – bucho と呼ばれています • 株式会社バスキュール – 生放送テレビ番組と連動するサービス – エンジニア足りません
3.
ユニットテスト def test():
result = foo('wozozo') assert result == 'unko'
4.
依存先… def foo(name):
f = urlopen('http://%s.com/' % name) raw = f.read() d = json.loads(raw) 不確定 return d['data'] 確定的な 結果に依存
5.
ユニットテストしにくい例 • 戻り値が不確定
– 乱数 – 時刻 • セットアップがだるい – データベース – Web API
6.
テスト対象の外側を入出力として扱う
ここも入出力 よびだし HTTP req def foo(name): raw = urlopen('http://…') d = json.loads(raw) return d['data'] 戻り値 HTTP resp
7.
そこで mock モジュール
ですよ • Python 3.2 以前 PyPI – easy_install, pip, etc. • Python 3.3 標準ライブラリ – uniDest.mock
8.
1: 依存先オブジェクトを入れ替える テスト対象
urlopen テスト対象 mock
9.
with patch(...) で入れ替える from
unittest.mock import patch def test(): with patch('urllib.request.urlopen') as m: result = foo('wozozo')
10.
Mock オブジェクトと入れ替え >>> with
patch('urllib.request.urlopen') as m: ... from urllib.request import urlopen ... urlopen is m ... True
11.
Mock オブジェクトはアクセスし放題 >>> m
<MagicMock name='urlopen' id='1'> >>> m.read() <MagicMock name='urlopen.read()' id='2'> >>> m.hoge <MagicMock name='urlopen.hoge' id='3'>
12.
@patch で入れ替える @patch('urllib.request.urlopen') def
test(m): result = foo('wozozo')
13.
setUp と tearDown
で patch class MyTest(TestCase): def setUp(self): self.patcher = patch('...') self.m = patcher.start() def tearDown(self): self.patcher.stop()
14.
2: 依存先の呼び出し履歴を確認 テスト
テスト対象 mock
15.
call_count で呼び出し回数を確認 @patch('urllib.request.urlopen') def
test(m): result = foo('wozozo') assert m.call_count == 1
16.
call_args で引数を確認 @patch('urllib.request.urlopen') def
test(m): result = foo('wozozo') assert m.call_count == 1 assert (m.call_args == (('http://...',), {}))
17.
*args と **kw
が返ってくる m(a, b, x=1) ↓ m.call_args == ((a, b), {'x': 1})
18.
3: 依存先の挙動を定義する テスト
テスト対象 mock
19.
return_value で戻り値定義 >>> m.return_value
= 999 >>> m() 999
20.
urlopen().read() def foo(name):
f = urlopen('http://%s.com/' % name) raw = f.read() d = json.loads(raw) return d['data']
21.
return_value で戻り値定義 >>> m.return_value.meth.return_value
= 1 >>> m().meth() 1
22.
@patch('urllib.request.urlopen') def test_foo(m):
m.return_value.read.return_value = '…' result = foo('wozozo') assert m.call_count == 1 assert (m.call_args == (('http://…',), {})) assert result == '…'
23.
複雑な戻り値は side_effect >>> def
f(x, y): ... return x + y ... >>> m.side_effect = f >>> m(1, 2) 3
24.
side_effect に例外を指定 >>> m.side_effect
= TypeError >>> m() Traceback (most recent call last): ... TypeError
25.
mock でユニットテストしやすくなる テスト
テスト対象 mock
26.
より詳しい話 • 公式ドキュメント •
voluntas 「requests と mock を使ってみる」 hDp://voluntas.hatenablog.com/entry/20111124/1322069748 • ぁっぉ 「mock はこう使え」 hDp://d.hatena.ne.jp/atsuoishimoto/20120310/1331311730
Download