Submit Search
OHHTTPStubsを使ったiOSアプリ開発
Mar 29, 2014
7 likes
7,136 views
今城 善矩
スタートアップ勉強会 #3で発表した資料です
Read more
1 of 33
Download presentation
Your download has started
Download now
Download to read offline
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
27
28
29
30
31
32
33
Recommended
BrowserMob-Proxyのお話
BrowserMob-Proxyのお話
Masahiko Hashimoto
BrowserMob-ProxyをPythonから使用する方法です。(簡単に)
マイクロサービスとOSSのおいしい関係
マイクロサービスとOSSのおいしい関係
Fumiya Shinozuka
Speee Cafe Meetup #7 (https://speee.connpass.com/event/56197/) で登壇した内容です。 業務中に効率よくOSSを試して、さらにはOSS活動をするためにマイクロサービスで影響範囲を小さく試す、という事例を紹介しました。
Pyenvで幸せになろう.py
Pyenvで幸せになろう.py
2bo 2bo
Python東海 第27回 発表資料
Python東海の紹介.py
Python東海の紹介.py
2bo 2bo
OSC名古屋2015 LT資料
あひる焼きの歴史 ver0.1
あひる焼きの歴史 ver0.1
2bo 2bo
KOF2015 東海道ラグLTでの発表
初心から一週間で作ってみた Kinesis Client Library for Go
初心から一週間で作ってみた Kinesis Client Library for Go
Terui Masashi
Sapporo #golang Meetup http://connpass.com/event/10878/
Pythonでzabbix apiを使ってみる
Pythonでzabbix apiを使ってみる
2bo 2bo
Python東海 第26回勉強会の資料です。
GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法
GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法
Satoshi Asano
次の週末はGitHub活動しよう
DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃
Teruo Adachi
SoftLayerオブジェクトストレージと連携サービスPBOXについて
SoftLayerオブジェクトストレージと連携サービスPBOXについて
Shuichi Yukimoto
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Yuhei Miyazato
LocoPartnersさんのiOSもくもく会#6にてお話したスライドです。 http://connpass.com/event/13198/
iOSアプリ開発 脱初心者に向けて
iOSアプリ開発 脱初心者に向けて
Kosuke Ogawa
2014.3.27 スマホアプリ開発勉強会@Talknote
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
MicroProfile Open API を使うと REST API のドキュメンテーションで苦労しなくなる話。
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
Koji Hasegawa
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
Shuichi Yukimoto
PBOXのことやObjectStorageのことについて発表した資料になります。資料の中に出来くるプログラムに記述されているapiキーなどは、架空のものになっているので、自分のものに置き換えて使うようにしてみてください。
職場で使用しているOSSの開発に参加してみた!
職場で使用しているOSSの開発に参加してみた!
infinite_loop
12月2日に行われたインフィニットループ×クラスメソッド×クリプトン合同勉強会で発表した資料です http://connpass.com/event/20314/
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
Webpla LLC.
2023年3月28日開催。自然言語処理への夢やChatGPTへの愚痴をこぼしながら、独自ボットの制作方法について実演とともに解説した際の資料です。
Jenkinsのある生活
Jenkinsのある生活
Takaya Funabiki
Jenkinsを導入しましょう。 そして、WindowsPhoneアプリ開発の現場でもJenkinsは有用です。
Chat opsをはじめよう!
Chat opsをはじめよう!
dcubeio
おしゃべりbotから業務効率化botの開発例をご紹介します!
Osc2009tokyofall xoops groupware
Osc2009tokyofall xoops groupware
Yoshi Sakai
konashi Make-a-thon "What's konashi"
konashi Make-a-thon "What's konashi"
Reo Matsumura
2013年6月1日にOpenCUで開催したkonashi Make-a-thonの冒頭で使用したスライドです. http://www.opencu.com/2013/05/konashi-make-a-thon/
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
akihiro uehara
全文検索入門
全文検索入門
antibayesian 俺がS式だ
SubversionとSugarsync
SubversionとSugarsync
Hidenori Goto
多治見IT勉強会 第8回での資料
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
新潟コンサルタント横田秀珠
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
多言語学習アプリを作成してみよう
多言語学習アプリを作成してみよう
korune ☆
2020/05/30 Japan Power Platform User Group Nagoya 第05回 #JPPUG758
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
Masaki Yamamoto
弊社IoTプラットフォーム、ZUGYUUUN!のご紹介です。
Robotium を使った UI テストとレイアウト確認の効率化
Robotium を使った UI テストとレイアウト確認の効率化
Kenichi Tatsuhama
2015/02/28 最新事例から学ぶ!モバイル向けテスト手法勉強会Sansan株式会社 辰濱健一 form 徳島サテライト会場(リモート発表)
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
FiNC社開催のpotatotips 23で話した資料です http://connpass.com/event/21750/
Stargazer Meetup1
Stargazer Meetup1
今城 善矩
Stargazer Meeup #1 で発表した資料です http://connpass.com/event/18896/
More Related Content
Similar to OHHTTPStubsを使ったiOSアプリ開発
(20)
DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃
Teruo Adachi
SoftLayerオブジェクトストレージと連携サービスPBOXについて
SoftLayerオブジェクトストレージと連携サービスPBOXについて
Shuichi Yukimoto
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Yuhei Miyazato
LocoPartnersさんのiOSもくもく会#6にてお話したスライドです。 http://connpass.com/event/13198/
iOSアプリ開発 脱初心者に向けて
iOSアプリ開発 脱初心者に向けて
Kosuke Ogawa
2014.3.27 スマホアプリ開発勉強会@Talknote
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
MicroProfile Open API を使うと REST API のドキュメンテーションで苦労しなくなる話。
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
Koji Hasegawa
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
Shuichi Yukimoto
PBOXのことやObjectStorageのことについて発表した資料になります。資料の中に出来くるプログラムに記述されているapiキーなどは、架空のものになっているので、自分のものに置き換えて使うようにしてみてください。
職場で使用しているOSSの開発に参加してみた!
職場で使用しているOSSの開発に参加してみた!
infinite_loop
12月2日に行われたインフィニットループ×クラスメソッド×クリプトン合同勉強会で発表した資料です http://connpass.com/event/20314/
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
Webpla LLC.
2023年3月28日開催。自然言語処理への夢やChatGPTへの愚痴をこぼしながら、独自ボットの制作方法について実演とともに解説した際の資料です。
Jenkinsのある生活
Jenkinsのある生活
Takaya Funabiki
Jenkinsを導入しましょう。 そして、WindowsPhoneアプリ開発の現場でもJenkinsは有用です。
Chat opsをはじめよう!
Chat opsをはじめよう!
dcubeio
おしゃべりbotから業務効率化botの開発例をご紹介します!
Osc2009tokyofall xoops groupware
Osc2009tokyofall xoops groupware
Yoshi Sakai
konashi Make-a-thon "What's konashi"
konashi Make-a-thon "What's konashi"
Reo Matsumura
2013年6月1日にOpenCUで開催したkonashi Make-a-thonの冒頭で使用したスライドです. http://www.opencu.com/2013/05/konashi-make-a-thon/
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
akihiro uehara
全文検索入門
全文検索入門
antibayesian 俺がS式だ
SubversionとSugarsync
SubversionとSugarsync
Hidenori Goto
多治見IT勉強会 第8回での資料
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
新潟コンサルタント横田秀珠
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
多言語学習アプリを作成してみよう
多言語学習アプリを作成してみよう
korune ☆
2020/05/30 Japan Power Platform User Group Nagoya 第05回 #JPPUG758
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
Masaki Yamamoto
弊社IoTプラットフォーム、ZUGYUUUN!のご紹介です。
Robotium を使った UI テストとレイアウト確認の効率化
Robotium を使った UI テストとレイアウト確認の効率化
Kenichi Tatsuhama
2015/02/28 最新事例から学ぶ!モバイル向けテスト手法勉強会Sansan株式会社 辰濱健一 form 徳島サテライト会場(リモート発表)
DevOpsが引き金となるインフラエンジニアの進撃
DevOpsが引き金となるインフラエンジニアの進撃
Teruo Adachi
SoftLayerオブジェクトストレージと連携サービスPBOXについて
SoftLayerオブジェクトストレージと連携サービスPBOXについて
Shuichi Yukimoto
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Yuhei Miyazato
iOSアプリ開発 脱初心者に向けて
iOSアプリ開発 脱初心者に向けて
Kosuke Ogawa
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
Koji Hasegawa
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
Shuichi Yukimoto
職場で使用しているOSSの開発に参加してみた!
職場で使用しているOSSの開発に参加してみた!
infinite_loop
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
MAごころを、君に - #7 ChatGPT勉強会(2023-03-28)
Webpla LLC.
Jenkinsのある生活
Jenkinsのある生活
Takaya Funabiki
Chat opsをはじめよう!
Chat opsをはじめよう!
dcubeio
Osc2009tokyofall xoops groupware
Osc2009tokyofall xoops groupware
Yoshi Sakai
konashi Make-a-thon "What's konashi"
konashi Make-a-thon "What's konashi"
Reo Matsumura
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
akihiro uehara
全文検索入門
全文検索入門
antibayesian 俺がS式だ
SubversionとSugarsync
SubversionとSugarsync
Hidenori Goto
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
スマホアプリ不要!プッシュ通知サービス・ニュースまとめ一覧
新潟コンサルタント横田秀珠
多言語学習アプリを作成してみよう
多言語学習アプリを作成してみよう
korune ☆
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
JavaScriptで簡単IoT! RasPiをインターネットから制御するプラットフォームを作ったよ!
Masaki Yamamoto
Robotium を使った UI テストとレイアウト確認の効率化
Robotium を使った UI テストとレイアウト確認の効率化
Kenichi Tatsuhama
More from 今城 善矩
(13)
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
FiNC社開催のpotatotips 23で話した資料です http://connpass.com/event/21750/
Stargazer Meetup1
Stargazer Meetup1
今城 善矩
Stargazer Meeup #1 で発表した資料です http://connpass.com/event/18896/
とにかく明るいCore Spotlight
とにかく明るいCore Spotlight
今城 善矩
Potatotips #20 で発表した資料です http://connpass.com/event/17624/
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
Realm meetup #3で話したスライドです
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
今城 善矩
第13回potatotipsで発表した資料です http://connpass.com/event/10697/
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
今城 善矩
第12回potatotipsで発表した資料です。 http://connpass.com/event/10283/ 資料はSwift1.2の仕様であり、現在とは違っています。
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
今城 善矩
この資料はクックパッド社主催のiOS/Android Tips交換会potatotips #11で発表した資料です。 https://github.com/potatotips/potatotips/wiki/potatotips-11 http://connpass.com/event/9639/
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
今城 善矩
「iOSアプリ開発の現場で訊いてきた」というインタビューの中で話したTipsを公開します
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
LLDiverの「帰ってきただめ自慢」で発表した資料です まとめ ・Optionalの変数を扱うときは当然Optional ChainingやBindingは使おうというのは前提で、それでもSwiftで完結できない現状ではクラッシュ率が上がるのでは、というお話です。 補足: 「WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方」 http://www.slideshare.net/YoshinoriImajo/webapioptional-bindingswift
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
今城 善矩
第2回 Swift 勉強会 - LT会@wantedly でLTした資料です http://wantedly.connpass.com/event/6755/
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
今城 善矩
第6回potatotipsで発表した資料です https://github.com/potatotips/potatotips/wiki/potatotips-6
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
今城 善矩
この資料は2014.3.12にクックパッド主催のiOS/Android Tips交換会potatotips #5で発表した資料です。 https://github.com/potatotips/potatotips/wiki/potatotips-5
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
今城 善矩
この資料は2014.1.15にクックパッド主催ヤフー開催のiOS/Android Tips交換会potatotips #3で発表した資料です。 https://github.com/potatotips/potatotips/wiki/Potatotips-3
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
Stargazer Meetup1
Stargazer Meetup1
今城 善矩
とにかく明るいCore Spotlight
とにかく明るいCore Spotlight
今城 善矩
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
今城 善矩
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
今城 善矩
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
今城 善矩
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
今城 善矩
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
今城 善矩
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
今城 善矩
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
今城 善矩
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
今城 善矩
OHHTTPStubsを使ったiOSアプリ開発
1.
OHHTTPStubsを使ったiOSアプリ開発 株式会社キュリオシティソフトウェア! @yimajo スタートアップiOS勉強会 #3
2.
自己紹介 ❖ (株)キュリオシティソフトウェア 今城
善矩! ❖ まったりiOSアプリの受託開発をしているので仕事の 話があれば相談に乗れる体制ですよ
3.
本題のOHHTTPStubsについて 2つのプロジェクトで使ってみた
4.
OHHTTPStubsとは ❖ iOSアプリの通信を内部でフックしてスタブ用のレスポ ンスを返すライブラリ ☓
5.
OHHTTPStubsとは ❖ 単体テストのためにプログラムを書き換える必要もない
6.
OHHTTPStubsとは ❖ ステータスコードを任意に変更もできるので異常系の確 認できる! ❖ レスポンス時間を長くして電波が悪い状況を作り出せる
7.
OHHTTPStubsとは ❖ 他のライブラリを組み合わせてテスト自動化もできる! ❖ そういうのよくある話なので今回の話には含まない
8.
最強のメリットは
9.
APIがまだ出来てなくてもAPIと の連携部分を単体テスト出来る
10.
そもそもの開発フローを 振り返ると
11.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
12.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
13.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
14.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
15.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認スタブで実装を進められる API連携部分の開発フロー
16.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
17.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
18.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
19.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認 API連携部分の開発フロー
20.
APIの仕様決め API実装 全体の仕様決め APIを開発環境に順次デプロイ APIの実動作確認スタブでプロトタイプを作れる API連携部分の開発フロー
21.
他に使ってみて良かったこと もあるよ
22.
良かったこと API開発者にエクセル方眼紙で! API仕様書を作ってもらったとき! jsonとしておかしい仕様になっていたり! 打ち合せと違ったりなんていうものが! 作られる時あるじゃないですか
23.
良かったこと そういう仕様書に対して! 「これjsonパース出来ないっすよね?」! 「打ち合わせと微妙に違ってませんか?」! みたいなレビューするのすごく気を使う
24.
良かったこと 結局はtypoだったりなので! API開発者が実装してみたら気づくだろうな! みたいな
25.
良かったこと まずはjsonとして正しい状態で! アプリ開発者に渡してくれるだけでも! 些末な指摘をしなくて良くなる
26.
使ってみて良くなかったこと もあるよ
27.
良くなかったこと 「スタブがあるならAPIの実装遅れてるけど間に合うよね?」
28.
良くなかったこと APIの実動作の確認が遅れたり! 結合させたとき生じる何かしらの課題に! 気づく時間が短くなる事はリスクになるよ!
29.
その他の気づいたこととかも あるよ
30.
リリースビルドに含めないように OHHTTPStubsなどテスト用の! フレームワークやライブラリは! 当然リリースビルドに含めたら駄目なので! リリースビルドでは絶対除外するように仕込む
31.
リリースビルドに含めないように そのときの除外の仕組みを! プリプロセッサマクロなどで! 作り込みすぎるのは良くない
32.
リリースビルドに含めないように 仕組みが完璧という自信があろうとなかろうと! 確認する手順は必要! ! その確認手順が煩雑になったり分かりづらいと! 結局時間がかかってしまう
33.
まとめ ❖ API開発者にスタブ用のデータは作ってもらおう! ❖ スタブはあくまで単体テストのためだったり無駄なコミュ ニケーションの時間を減らすためだって事は周知しよう! ❖
リリースビルドに含めないようにするにはテストTarget を別に作るとか基本的なやり方がシンプルでいいよ
Download presentation
Your download has started
Download