SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Mock	
  と	
  patch	

 ふるかわとおる
お前、誰よ?	
•  ふるかわとおる	
  
  –  @torufurukawa	
  
  –  bucho	
  と呼ばれています	
  
•  株式会社バスキュール	
  
  –  生放送テレビ番組と連動するサービス	
  
  –  エンジニア足りません	
  
ユニットテスト	
def	
  test():	
  
	
  	
  result	
  =	
  foo('wozozo')	
  
	
  	
  assert	
  result	
  ==	
  'unko'	
  
依存先…	
def	
  foo(name):	
  
	
  	
  f	
  =	
  urlopen('http://%s.com/'	
  %	
  name)	
  
	
  	
  raw	
  =	
  f.read()	
  
	
  	
  d	
  =	
  json.loads(raw)	
   不確定	
	
  	
  return	
  d['data']	
                                  確定的な	
  
                                 結果に依存
ユニットテストしにくい例	
•  戻り値が不確定	
  
  –  乱数	
  
  –  時刻	
  
•  セットアップがだるい	
  
  –  データベース	
  
  –  Web	
  API	
  
テスト対象の外側を入出力として扱う	

                               ここも入出力	
よびだし	
                                                 HTTP	
  req	
         def	
  foo(name):	
  
         	
  	
  raw	
  =	
  urlopen('http://…')	
  
         	
  	
  d	
  =	
  json.loads(raw)	
  
         	
  	
  return	
  d['data']	

戻り値	
                                                  HTTP	
  resp
そこで	
  mock	
  モジュール ですよ	
•  Python	
  3.2	
  以前 PyPI	
  
   –  easy_install,	
  pip,	
  etc.	
  


•  Python	
  3.3	
  標準ライブラリ	
  
   –  uniDest.mock	
  
1:	
  依存先オブジェクトを入れ替える	


テスト対象	
   urlopen	




テスト対象	
    mock
with	
  patch(...)	
  で入れ替える	
from	
  unittest.mock	
  import	
  patch	
  
def	
  test():	
  
	
  	
  with	
  patch('urllib.request.urlopen')	
  
	
  	
  as	
  m:	
  
	
  	
  	
  	
  result	
  =	
  foo('wozozo')	
  
Mock	
  オブジェクトと入れ替え	
>>>	
  with	
  patch('urllib.request.urlopen')	
  
	
  	
  	
  	
  as	
  m:	
  
...	
  	
  	
  from	
  urllib.request	
  import	
  urlopen	
  
...	
  	
  	
  urlopen	
  is	
  m	
  
...	
  	
  
True
Mock	
  オブジェクトはアクセスし放題	
>>>	
  m	
  
<MagicMock	
  name='urlopen'	
  id='1'>	
  
>>>	
  m.read()	
  
<MagicMock	
  name='urlopen.read()'	
  id='2'>	
  
>>>	
  m.hoge	
  
<MagicMock	
  name='urlopen.hoge'	
  id='3'>	
  
@patch	
  で入れ替える	
@patch('urllib.request.urlopen')	
  
def	
  test(m):	
  
	
  	
  result	
  =	
  foo('wozozo')	
  
setUp	
  と tearDown	
  で	
  patch	
class	
  MyTest(TestCase):	
  
	
  	
  def	
  setUp(self):	
  
	
  	
  	
  	
  self.patcher	
  =	
  patch('...')	
  
	
  	
  	
  	
  self.m	
  =	
  patcher.start()	
  
	
  
	
  	
  def	
  tearDown(self):	
  
	
  	
  	
  	
  self.patcher.stop()
2:	
  依存先の呼び出し履歴を確認	



テスト	
   テスト対象	
   mock
call_count	
  で呼び出し回数を確認	
@patch('urllib.request.urlopen')	
  
def	
  test(m):	
  
	
  	
  result	
  =	
  foo('wozozo')	
  
	
  	
  assert	
  m.call_count	
  ==	
  1	
  
call_args	
  で引数を確認	
@patch('urllib.request.urlopen')	
  
def	
  test(m):	
  
	
  	
  result	
  =	
  foo('wozozo')	
  
	
  	
  assert	
  m.call_count	
  ==	
  1	
  
	
  	
  assert	
  (m.call_args	
  ==	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (('http://...',),	
  {}))	
  
*args	
  と	
  **kw	
  が返ってくる	
m(a,	
  b,	
  x=1)	
  
↓	
  
m.call_args	
  ==	
  ((a,	
  b),	
  {'x':	
  1})
3:	
  依存先の挙動を定義する	



テスト	
   テスト対象	
   mock
return_value	
  で戻り値定義	
>>>	
  m.return_value	
  =	
  999	
  
>>>	
  m()	
  
999	
  
urlopen().read()	
def	
  foo(name):	
  
	
  	
  f	
  =	
  urlopen('http://%s.com/'	
  %	
  name)	
  
	
  	
  raw	
  =	
  f.read()	
  
	
  	
  d	
  =	
  json.loads(raw)	
  
	
  	
  return	
  d['data']
return_value	
  で戻り値定義	
>>>	
  m.return_value.meth.return_value	
  =	
  1	
  
>>>	
  m().meth()	
  
1	
  
@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	
  ==	
  '…'	
  
複雑な戻り値は side_effect	
>>>	
  def	
  f(x,	
  y):	
  	
  
...	
  	
  	
  return	
  x	
  +	
  y	
  
...	
  	
  
>>>	
  m.side_effect	
  =	
  f	
  
>>>	
  m(1,	
  2)	
  
3
side_effect	
  に例外を指定	
>>>	
  m.side_effect	
  =	
  TypeError	
  
>>>	
  m()	
  
Traceback	
  (most	
  recent	
  call	
  last):	
  
...	
  
TypeError
mock	
  でユニットテストしやすくなる	



 テスト	
   テスト対象	
   mock
より詳しい話	
•  公式ドキュメント	
  
•  voluntas	
  「requests	
  と	
  mock	
  を使ってみる」	
  
     hDp://voluntas.hatenablog.com/entry/20111124/1322069748	
  
•  ぁっぉ 「mock	
  はこう使え」	
  
     hDp://d.hatena.ne.jp/atsuoishimoto/20120310/1331311730	
  

Más contenido relacionado

La actualidad más candente

The PubchemQC project
The PubchemQC projectThe PubchemQC project
The PubchemQC projectMaho Nakata
 
Geometry Processingで学ぶSparse Matrix
Geometry Processingで学ぶSparse MatrixGeometry Processingで学ぶSparse Matrix
Geometry Processingで学ぶSparse MatrixJun Saito
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
クラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリングクラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリングHiroshi Nakagawa
 
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -MPRG_Chubu_University
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
5分で分かる自己組織化マップ
5分で分かる自己組織化マップ5分で分かる自己組織化マップ
5分で分かる自己組織化マップDaisuke Takai
 
条件付き確率場の推論と学習
条件付き確率場の推論と学習条件付き確率場の推論と学習
条件付き確率場の推論と学習Masaki Saito
 
論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)Masaya Kaneko
 
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)kowa kowa
 
Sift特徴量について
Sift特徴量についてSift特徴量について
Sift特徴量についてla_flance
 
論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...
論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...
論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...Ken Sakurada
 
関数(&統計の続き)(人間科学のための基礎数学)
関数(&統計の続き)(人間科学のための基礎数学)関数(&統計の続き)(人間科学のための基礎数学)
関数(&統計の続き)(人間科学のための基礎数学)Masahiro Okano
 
HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...
HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...
HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...harmonylab
 
ベイズモデリングと仲良くするために
ベイズモデリングと仲良くするためにベイズモデリングと仲良くするために
ベイズモデリングと仲良くするためにShushi Namba
 
マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1Nagi Teramo
 
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー階層ベイズと自由エネルギー
階層ベイズと自由エネルギーHiroshi Shimizu
 
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策Unity Technologies Japan K.K.
 
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...Deep Learning JP
 

La actualidad más candente (20)

The PubchemQC project
The PubchemQC projectThe PubchemQC project
The PubchemQC project
 
Geometry Processingで学ぶSparse Matrix
Geometry Processingで学ぶSparse MatrixGeometry Processingで学ぶSparse Matrix
Geometry Processingで学ぶSparse Matrix
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
クラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリングクラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリング
 
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
画像局所特徴量と特定物体認識 - SIFTと最近のアプローチ -
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
5分で分かる自己組織化マップ
5分で分かる自己組織化マップ5分で分かる自己組織化マップ
5分で分かる自己組織化マップ
 
条件付き確率場の推論と学習
条件付き確率場の推論と学習条件付き確率場の推論と学習
条件付き確率場の推論と学習
 
論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)論文読み会(DeMoN;CVPR2017)
論文読み会(DeMoN;CVPR2017)
 
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
趣味として絵を描き続けるために心がけていること(久しぶりに絵を描いても落ち込まないための絵のウォーミングアップ術)
 
FOBOS
FOBOSFOBOS
FOBOS
 
Sift特徴量について
Sift特徴量についてSift特徴量について
Sift特徴量について
 
論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...
論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...
論文紹介"DynamicFusion: Reconstruction and Tracking of Non-­‐rigid Scenes in Real...
 
関数(&統計の続き)(人間科学のための基礎数学)
関数(&統計の続き)(人間科学のための基礎数学)関数(&統計の続き)(人間科学のための基礎数学)
関数(&統計の続き)(人間科学のための基礎数学)
 
HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...
HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...
HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Est...
 
ベイズモデリングと仲良くするために
ベイズモデリングと仲良くするためにベイズモデリングと仲良くするために
ベイズモデリングと仲良くするために
 
マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1
 
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
 
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
 
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
[DL輪読会]Vision Transformer with Deformable Attention (Deformable Attention Tra...
 

Similar a Mock and patch

Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Unit test in android
Unit test in androidUnit test in android
Unit test in androidTatsuya Maki
 
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptxKompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptxManamiMaeda
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter IntegrationKazuki Nakajima
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPIDaisuke Igarashi
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】株式会社ランチェスター
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現する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日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)Fujio Kojima
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 

Similar a Mock and patch (20)

Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Unit test in android
Unit test in androidUnit test in android
Unit test in android
 
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptxKompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
Kompira開発者が教えるジョブフローTips7選_Kompass発表資料20240306.pptx
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
Ansible入門...?
Ansible入門...?Ansible入門...?
Ansible入門...?
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現する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日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
Task
TaskTask
Task
 

Más de Toru Furukawa

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン 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 GoMy client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoToru Furukawa
 
Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1Toru Furukawa
 
Test Failed, Then...
Test Failed, Then...Test Failed, Then...
Test Failed, Then...Toru Furukawa
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012Toru Furukawa
 
Python 3.3 チラ見
Python 3.3 チラ見Python 3.3 チラ見
Python 3.3 チラ見Toru Furukawa
 
Python32 pyhackathon-201011
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011Toru Furukawa
 

Más de Toru Furukawa (11)

Twitter 広告と API を組み合わせたインタラクティブなキャンペーン
 Twitter 広告と API を組み合わせたインタラクティブなキャンペーン 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 GoMy 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 1Introduction to Python 3.4 as of beta 1
Introduction to Python 3.4 as of beta 1
 
Test Failed, Then...
Test Failed, Then...Test Failed, Then...
Test Failed, Then...
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012Trying Continuous Delivery - pyconjp 2012
Trying Continuous Delivery - pyconjp 2012
 
Python 3.3 チラ見
Python 3.3 チラ見Python 3.3 チラ見
Python 3.3 チラ見
 
Python32 pyhackathon-201011
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011
 
Django
Django Django
Django
 
Python 2.7
Python 2.7Python 2.7
Python 2.7
 
BPStudy#34 導入
BPStudy#34 導入BPStudy#34 導入
BPStudy#34 導入
 

Mock and patch