Enviar pesquisa
Carregar
Mock and patch
•
5 gostaram
•
2,504 visualizações
Toru Furukawa
Seguir
Python mock ライブラリの紹介
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 26
Baixar agora
Baixar para ler offline
Recomendados
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
uchan_nos
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz
京大 マイコンクラブ
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
Halide for Memory
Halide for Memory
Koumei Tomida
Recomendados
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
uchan_nos
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz
京大 マイコンクラブ
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
Halide for Memory
Halide for Memory
Koumei Tomida
何もないところから数を作る
何もないところから数を作る
Taketo Sano
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
計算スケジューリングの効果~もし,Halideがなかったら?~
計算スケジューリングの効果~もし,Halideがなかったら?~
Norishige Fukushima
Tα τρία άλυτα προβλήματα της αρχαιότητας και ο "αναρχικός" Μαθηματικός Evari...
Tα τρία άλυτα προβλήματα της αρχαιότητας και ο "αναρχικός" Μαθηματικός Evari...
jpapoglou
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
NVMCT #1 ~今さら聞けないSSDの基本~
NVMCT #1 ~今さら聞けないSSDの基本~
Fixstars Corporation
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
最速C# 7.x
最速C# 7.x
Yamamoto Reki
カード収集ゲームにおけるPlayFabの使い方
カード収集ゲームにおけるPlayFabの使い方
Daisuke Masubuchi
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
Final field semantics
Final field semantics
Vladimir Sitnikov
素数の分解法則(フロベニウスやばい) #math_cafe
素数の分解法則(フロベニウスやばい) #math_cafe
Junpei Tsuji
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
VirtualTech Japan Inc.
PostgreSQLコミュニティに飛び込もう
PostgreSQLコミュニティに飛び込もう
NTT DATA OSS Professional Services
1070: CUDA プログラミング入門
1070: CUDA プログラミング入門
NVIDIA Japan
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
yieldとreturnの話
yieldとreturnの話
bleis tift
楽しいクォータニオンの世界 田所 第二回Rogyゼミ
楽しいクォータニオンの世界 田所 第二回Rogyゼミ
rogy01
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Unit test in android
Unit test in android
Tatsuya Maki
Mais conteúdo relacionado
Mais procurados
何もないところから数を作る
何もないところから数を作る
Taketo Sano
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
計算スケジューリングの効果~もし,Halideがなかったら?~
計算スケジューリングの効果~もし,Halideがなかったら?~
Norishige Fukushima
Tα τρία άλυτα προβλήματα της αρχαιότητας και ο "αναρχικός" Μαθηματικός Evari...
Tα τρία άλυτα προβλήματα της αρχαιότητας και ο "αναρχικός" Μαθηματικός Evari...
jpapoglou
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
NVMCT #1 ~今さら聞けないSSDの基本~
NVMCT #1 ~今さら聞けないSSDの基本~
Fixstars Corporation
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
最速C# 7.x
最速C# 7.x
Yamamoto Reki
カード収集ゲームにおけるPlayFabの使い方
カード収集ゲームにおけるPlayFabの使い方
Daisuke Masubuchi
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
Final field semantics
Final field semantics
Vladimir Sitnikov
素数の分解法則(フロベニウスやばい) #math_cafe
素数の分解法則(フロベニウスやばい) #math_cafe
Junpei Tsuji
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
VirtualTech Japan Inc.
PostgreSQLコミュニティに飛び込もう
PostgreSQLコミュニティに飛び込もう
NTT DATA OSS Professional Services
1070: CUDA プログラミング入門
1070: CUDA プログラミング入門
NVIDIA Japan
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
yieldとreturnの話
yieldとreturnの話
bleis tift
楽しいクォータニオンの世界 田所 第二回Rogyゼミ
楽しいクォータニオンの世界 田所 第二回Rogyゼミ
rogy01
Mais procurados
(20)
何もないところから数を作る
何もないところから数を作る
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
計算スケジューリングの効果~もし,Halideがなかったら?~
計算スケジューリングの効果~もし,Halideがなかったら?~
Tα τρία άλυτα προβλήματα της αρχαιότητας και ο "αναρχικός" Μαθηματικός Evari...
Tα τρία άλυτα προβλήματα της αρχαιότητας και ο "αναρχικός" Μαθηματικός Evari...
関数プログラミング入門
関数プログラミング入門
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
NVMCT #1 ~今さら聞けないSSDの基本~
NVMCT #1 ~今さら聞けないSSDの基本~
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
最速C# 7.x
最速C# 7.x
カード収集ゲームにおけるPlayFabの使い方
カード収集ゲームにおけるPlayFabの使い方
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
Final field semantics
Final field semantics
素数の分解法則(フロベニウスやばい) #math_cafe
素数の分解法則(フロベニウスやばい) #math_cafe
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
PostgreSQLコミュニティに飛び込もう
PostgreSQLコミュニティに飛び込もう
1070: CUDA プログラミング入門
1070: CUDA プログラミング入門
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
yieldとreturnの話
yieldとreturnの話
楽しいクォータニオンの世界 田所 第二回Rogyゼミ
楽しいクォータニオンの世界 田所 第二回Rogyゼミ
Semelhante a 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
Semelhante a 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
Mais de 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
Mais de 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 導入
Último
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Último
(10)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
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
Baixar agora