Soumettre la recherche
Mettre en ligne
Mock and patch
•
5 j'aime
•
2,504 vues
Toru Furukawa
Suivre
Python mock ライブラリの紹介
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 26
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
統計的学習の基礎6章前半 #カステラ本
統計的学習の基礎6章前半 #カステラ本
Akifumi Eguchi
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
ichikaway
パターン(ランゲージ)によるKnow Why/What/How の言語化・文書化と発展, MLSE夏合宿
パターン(ランゲージ)によるKnow Why/What/How の言語化・文書化と発展, MLSE夏合宿
Hironori Washizaki
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方
Hiroshi Tokumaru
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行について
Tomoya Kawanishi
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
Yasutomo Uemori
統計的学習の基礎 3章後半
統計的学習の基礎 3章後半
Kazunori Miyanishi
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
Hajime Fujita
Recommandé
統計的学習の基礎6章前半 #カステラ本
統計的学習の基礎6章前半 #カステラ本
Akifumi Eguchi
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
ichikaway
パターン(ランゲージ)によるKnow Why/What/How の言語化・文書化と発展, MLSE夏合宿
パターン(ランゲージ)によるKnow Why/What/How の言語化・文書化と発展, MLSE夏合宿
Hironori Washizaki
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方
Hiroshi Tokumaru
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行について
Tomoya Kawanishi
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
Yasutomo Uemori
統計的学習の基礎 3章後半
統計的学習の基礎 3章後半
Kazunori Miyanishi
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
トップエンジニアが実践する思考整理法~テクニカルライティングを用いた課題解決の基本
Hajime Fujita
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
horihorio
自宅サーバラックの勧め BGP4編
自宅サーバラックの勧め BGP4編
h-otter
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
Yahoo!デベロッパーネットワーク
AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場
Yusuke Goto
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
UnityTechnologiesJapan002
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
Hirohito Morinaga
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
JPCERT Coordination Center
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
Gitの便利ワザ
Gitの便利ワザ
ktateish
SlideShareをやめて Speaker Deckに移行します
SlideShareをやめて Speaker Deckに移行します
Moriwaka Kazuo
ヤマハルータで始める自宅LANのすゝめ
ヤマハルータで始める自宅LANのすゝめ
Lee Choong Geun
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
一希 大田
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
健一 辰濱
ゲームAI製作のためのワークショップ(I)
ゲームAI製作のためのワークショップ(I)
Youichiro Miyake
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
証明プログラミング入門2
証明プログラミング入門2
Kyoko Kadowaki
Rootlessコンテナ
Rootlessコンテナ
Akihiro Suda
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
GMO GlobalSign Holdings K.K.
Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
Unit test in android
Unit test in android
Tatsuya Maki
Contenu connexe
Tendances
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
horihorio
自宅サーバラックの勧め BGP4編
自宅サーバラックの勧め BGP4編
h-otter
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
Yahoo!デベロッパーネットワーク
AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場
Yusuke Goto
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
UnityTechnologiesJapan002
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
Hirohito Morinaga
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
JPCERT Coordination Center
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
Gitの便利ワザ
Gitの便利ワザ
ktateish
SlideShareをやめて Speaker Deckに移行します
SlideShareをやめて Speaker Deckに移行します
Moriwaka Kazuo
ヤマハルータで始める自宅LANのすゝめ
ヤマハルータで始める自宅LANのすゝめ
Lee Choong Geun
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
一希 大田
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
健一 辰濱
ゲームAI製作のためのワークショップ(I)
ゲームAI製作のためのワークショップ(I)
Youichiro Miyake
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
証明プログラミング入門2
証明プログラミング入門2
Kyoko Kadowaki
Rootlessコンテナ
Rootlessコンテナ
Akihiro Suda
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
GMO GlobalSign Holdings K.K.
Tendances
(20)
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
分析のビジネス展開を考える―状態空間モデルを例に @TokyoWebMining #47
自宅サーバラックの勧め BGP4編
自宅サーバラックの勧め BGP4編
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
AbemaTV が対峙する技術的課題と開発の現場
AbemaTV が対峙する技術的課題と開発の現場
クロージャデザインパターン
クロージャデザインパターン
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
【Unite Tokyo 2019】大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
HTTP/2 入門
HTTP/2 入門
Gitの便利ワザ
Gitの便利ワザ
SlideShareをやめて Speaker Deckに移行します
SlideShareをやめて Speaker Deckに移行します
ヤマハルータで始める自宅LANのすゝめ
ヤマハルータで始める自宅LANのすゝめ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
ゲームAI製作のためのワークショップ(I)
ゲームAI製作のためのワークショップ(I)
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
証明プログラミング入門2
証明プログラミング入門2
Rootlessコンテナ
Rootlessコンテナ
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Similaire à 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
Similaire à 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
Plus 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
Plus 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 導入
Dernier
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
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
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Dernier
(12)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
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
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
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
Télécharger maintenant