Suche senden
Hochladen
Mock and patch
•
5 gefällt mir
•
2,504 views
Toru Furukawa
Folgen
Python mock ライブラリの紹介
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 26
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
lestrrat
Fondamentaux java
Fondamentaux java
Ines Ouaz
Zero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with Netty
Daniel Bimschas
Python business intelligence (PyData 2012 talk)
Python business intelligence (PyData 2012 talk)
Stefan Urbanek
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
Empfohlen
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
lestrrat
Fondamentaux java
Fondamentaux java
Ines Ouaz
Zero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with Netty
Daniel Bimschas
Python business intelligence (PyData 2012 talk)
Python business intelligence (PyData 2012 talk)
Stefan Urbanek
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
hdais
ストリームデータ分散処理基盤Storm
ストリームデータ分散処理基盤Storm
NTT DATA OSS Professional Services
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NG
Hideki Saito
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
OpenID Foundation Japan
Java - programmation concurrente
Java - programmation concurrente
Franck SIMON
5分で分かるgitのrefspec
5分で分かるgitのrefspec
ikdysfm
rsyncのちょっとイイ話
rsyncのちょっとイイ話
Kazuhiro Oinuma
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
Mise en place vidéoconférence + chat avec Openfire
Mise en place vidéoconférence + chat avec Openfire
Abdou Lahad SYLLA
Design patterns - Exemples en Java
Design patterns - Exemples en Java
Oussama BEN KHIROUN
Clean Architecture Applications in Python
Clean Architecture Applications in Python
Subhash Bhushan
php2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発
祐司 伊藤
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
Shinya Sugiyama
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Masayuki Ozawa
例外設計における大罪
例外設計における大罪
Takuto Wada
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
ksimoji
Zshでデキるプロンプト
Zshでデキるプロンプト
Maruyama Tetsutaro
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Unit test in android
Unit test in android
Tatsuya Maki
Weitere ähnliche Inhalte
Was ist angesagt?
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
hdais
ストリームデータ分散処理基盤Storm
ストリームデータ分散処理基盤Storm
NTT DATA OSS Professional Services
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NG
Hideki Saito
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
OpenID Foundation Japan
Java - programmation concurrente
Java - programmation concurrente
Franck SIMON
5分で分かるgitのrefspec
5分で分かるgitのrefspec
ikdysfm
rsyncのちょっとイイ話
rsyncのちょっとイイ話
Kazuhiro Oinuma
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
Mise en place vidéoconférence + chat avec Openfire
Mise en place vidéoconférence + chat avec Openfire
Abdou Lahad SYLLA
Design patterns - Exemples en Java
Design patterns - Exemples en Java
Oussama BEN KHIROUN
Clean Architecture Applications in Python
Clean Architecture Applications in Python
Subhash Bhushan
php2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発
祐司 伊藤
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
Shinya Sugiyama
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Masayuki Ozawa
例外設計における大罪
例外設計における大罪
Takuto Wada
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
ksimoji
Zshでデキるプロンプト
Zshでデキるプロンプト
Maruyama Tetsutaro
Was ist angesagt?
(20)
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
ストリームデータ分散処理基盤Storm
ストリームデータ分散処理基盤Storm
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Getting Started - Ansible Galaxy NG
Getting Started - Ansible Galaxy NG
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Shibboleth IdP V3とアカデミックIDフェデレーション - OpenID Summit 2015
Java - programmation concurrente
Java - programmation concurrente
5分で分かるgitのrefspec
5分で分かるgitのrefspec
rsyncのちょっとイイ話
rsyncのちょっとイイ話
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Mise en place vidéoconférence + chat avec Openfire
Mise en place vidéoconférence + chat avec Openfire
Design patterns - Exemples en Java
Design patterns - Exemples en Java
Clean Architecture Applications in Python
Clean Architecture Applications in Python
php2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
C/C++とWebAssemblyを利用したライブラリ開発
C/C++とWebAssemblyを利用したライブラリ開発
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
例外設計における大罪
例外設計における大罪
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
Zshでデキるプロンプト
Zshでデキるプロンプト
Ähnlich wie Mock and patch
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Unit test in android
Unit test in android
Tatsuya Maki
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
ManamiMaeda
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
Ansible入門...?
Ansible入門...?
shirou wakayama
Subprocess no susume
Subprocess no susume
Makoto Kishimoto
Pyramid入門
Pyramid入門
Atsushi Odagiri
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Tomohiro Kumagai
Ruby test double
Ruby test double
Naotoshi Seo
Applicative functor
Applicative functor
Yuichi Adachi
Local php-100828 2
Local php-100828 2
Akio Ishida
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
研究生のためのC++ no.2
研究生のためのC++ no.2
Tomohiro Namba
Continuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
Fujio Kojima
Perl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
Task
Task
Shingo Nakamura
Ähnlich wie Mock and patch
(20)
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Unit test in android
Unit test in android
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Ekmett勉強会発表資料
Ekmett勉強会発表資料
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Ansible入門...?
Ansible入門...?
Subprocess no susume
Subprocess no susume
Pyramid入門
Pyramid入門
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
Ruby test double
Ruby test double
Applicative functor
Applicative functor
Local php-100828 2
Local php-100828 2
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
研究生のためのC++ no.2
研究生のためのC++ no.2
Continuation with Boost.Context
Continuation with Boost.Context
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
Perl 非同期プログラミング
Perl 非同期プログラミング
Task
Task
Mehr von Toru Furukawa
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Toru Furukawa
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with Go
Toru Furukawa
Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1
Toru Furukawa
Test Failed, Then...
Test Failed, Then...
Toru Furukawa
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012
Toru Furukawa
Python 3.3 チラ見
Python 3.3 チラ見
Toru Furukawa
Python32 pyhackathon-201011
Python32 pyhackathon-201011
Toru Furukawa
Django
Django
Toru Furukawa
Python 2.7
Python 2.7
Toru Furukawa
BPStudy#34 導入
BPStudy#34 導入
Toru Furukawa
Mehr von Toru Furukawa
(11)
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with Go
Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1
Test Failed, Then...
Test Failed, Then...
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012
Python 3.3 チラ見
Python 3.3 チラ見
Python32 pyhackathon-201011
Python32 pyhackathon-201011
Django
Django
Python 2.7
Python 2.7
BPStudy#34 導入
BPStudy#34 導入
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
Jetzt herunterladen