SlideShare a Scribd company logo
1 of 15
Download to read offline
開発作業やテストの時にMockでケースごとの
UIチェックやテストを書きやすくする


POTATOTIPS #73 2021/03/26
@MedPeer, Inc.  


杉山 優悟
README
• Name: 杉山優悟 / Yugo Sugiyama
• Age: 27歳
• From: 神奈川県藤沢市
• Job: SHOWROOM株式会社(2020/4/16 )
• Hobby: 料理、アニメ、自転車、テニス
• Quali
fi
cation: 教員免許(中学/高等学校社会科全般)
今日の発表内容
開発作業やテストの時にMockでケースごと
のUIチェックやテストを書きやすくする
開発やテストを書く時に困ること
• APIができてなくて、API通信ができない


• リストが複数、1つ、空など複数のユースケースのUIチェック用の
データの用意が大変


• 上記のようなユースケースのUIを個別にすぐ確認するのが難しい


• 上記のようなユースケースのテストコードを網羅的に書くのが難しい
1つの改善案として
• DIを使って、ユースケースごとのデータが返るような実装を用意


1. Dependency Injectionを使って、通信処理のAPI用/Mock用の
Classを切り替えられるようにする。


2. ユースケース分のMockTypeを事前に定義しておき、DebugMenu
からそれらを切り替えられるようにする。


3. MockのClassは設定したMockTypeに応じた値を返すようにする。
デモ
1. Dependency Injectionを使って、通信処理のAPI
用/Mock用のClassを切り替えられるようにする。
• API接続用のクラスとMock用のclassをDIを使って、切り替えられるようにする


• デモアプリでは、DIContainerとしてDependenciesをベースして、以下のように
使ってます。


• @Injectと型をつけると、DIContainerに設定したインスタンスを参照できる


• 参照を持っているだけなので、DebugMenuなどからインスタンスを切り替えるこ
とができる。


@Inject private var mockService: MockProtocol
2. 動作パターン分のMockTypeを事前に定義しておき、
DebugMenuからそれらを切り替えられるようにする。
• 以下のようなMockTypeのenumを定義


• DebugMenuから選択中のMockTypeを切り替えて、UserDefaultsに保存する


• UserDefaultsの状態に合わせて、通信用classを再設定する


enum MockType: String, CaseIterable {


case randomList


case randomListWithSameColor


case randomListWithShortText


case randomListWithDelay


case single


case empty


case error


}
3. MockのClassは設定したMockTypeに応じた
値を返すようにする。
• 選択したMockTypeに応じて、レスポンスを切り替える


switch mockType {


case .randomList:


let list = [Int](0...Int.random(in: 1...100))


.map({ _ in ColorModel(text: .random(), color: .random) })


completion(.success(list))


case .single:


completion(.success([.init(text: .random(), color: .random)]))


case .empty:


completion(.success([]))


case .error:


completion(.failure(MockError.mockError(message: "This is Error(Mock)”)))


……


}
Mock切り替えのメリット
• APIの実装前でも開発できる。


• テストが(個人的には)書きやすい


• ユースケースごとのUIチェック・テストケースを網羅的にかける


• MockTypeごとのテストを作成する


• ユースケースが増減しても、追加・削除が容易


• InHouseなど配布用のアプリ(端末のみ)でも検証可能
Mock切り替えのデメリット
• MockTypeやMockクラスの処理を仕様通りに書かないと意味がない


• 当たり前ですが。。


• API通信(URLRequestなど)やDecodableなどjsonのparse処理の動作確認やテス
トはできない


• Charles使って動作確認したり、別途Parse用のテストなどは書く必要がある


• 最初の準備は少し大変


• その後の横展開はそこまで手間ではない
結論
開発作業やテストの時の作業がしやすいよ
うな環境を整えることは大事
終劇
予告
次回
終わるRx、始まるCombine(仮)

More Related Content

Similar to 開発作業やテストの時にMockでケースごとの UIチェックやテストを書きやすくする

はじめてのテスト技法
はじめてのテスト技法はじめてのテスト技法
はじめてのテスト技法Tatsuya Saito
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜Koichi ITO
 
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座Masaru Gushiken
 
UXを損ねる静的コンテンツ配信アンチパターン7選
UXを損ねる静的コンテンツ配信アンチパターン7選UXを損ねる静的コンテンツ配信アンチパターン7選
UXを損ねる静的コンテンツ配信アンチパターン7選Yuki Okada
 
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出VOYAGE GROUP
 
開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能Masaki Suzuki
 
たのしいアノテーション
たのしいアノテーションたのしいアノテーション
たのしいアノテーションKazuhiro Sasao
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
2012年度webゼミ前期発表
2012年度webゼミ前期発表2012年度webゼミ前期発表
2012年度webゼミ前期発表Chihiro Koyama
 
20150328 humansociria
20150328 humansociria20150328 humansociria
20150328 humansociriaMayumi Emori
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能TomomitsuKusaba
 
Devとopsをつなぐchat ops
Devとopsをつなぐchat opsDevとopsをつなぐchat ops
Devとopsをつなぐchat opsikikko
 
Azureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめようAzureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめようNaoya Kojima
 
社内の遊休PCをAzurePipelinesでCICDに活用しよう
社内の遊休PCをAzurePipelinesでCICDに活用しよう社内の遊休PCをAzurePipelinesでCICDに活用しよう
社内の遊休PCをAzurePipelinesでCICDに活用しようShinya Nakajima
 
Shinogi meetup online_20200729
Shinogi meetup online_20200729Shinogi meetup online_20200729
Shinogi meetup online_20200729Naotaka Shinogi
 
ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話Suguru Shirai
 
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋Kentaro Ohkouchi
 

Similar to 開発作業やテストの時にMockでケースごとの UIチェックやテストを書きやすくする (20)

DevOps、その前に
DevOps、その前にDevOps、その前に
DevOps、その前に
 
はじめてのテスト技法
はじめてのテスト技法はじめてのテスト技法
はじめてのテスト技法
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
 
鹿駆動
鹿駆動鹿駆動
鹿駆動
 
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
 
UXを損ねる静的コンテンツ配信アンチパターン7選
UXを損ねる静的コンテンツ配信アンチパターン7選UXを損ねる静的コンテンツ配信アンチパターン7選
UXを損ねる静的コンテンツ配信アンチパターン7選
 
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
 
開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能
 
たのしいアノテーション
たのしいアノテーションたのしいアノテーション
たのしいアノテーション
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
2012年度webゼミ前期発表
2012年度webゼミ前期発表2012年度webゼミ前期発表
2012年度webゼミ前期発表
 
20150328 humansociria
20150328 humansociria20150328 humansociria
20150328 humansociria
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
Devとopsをつなぐchat ops
Devとopsをつなぐchat opsDevとopsをつなぐchat ops
Devとopsをつなぐchat ops
 
Azureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめようAzureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめよう
 
社内の遊休PCをAzurePipelinesでCICDに活用しよう
社内の遊休PCをAzurePipelinesでCICDに活用しよう社内の遊休PCをAzurePipelinesでCICDに活用しよう
社内の遊休PCをAzurePipelinesでCICDに活用しよう
 
Shinogi meetup online_20200729
Shinogi meetup online_20200729Shinogi meetup online_20200729
Shinogi meetup online_20200729
 
ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話
 
Roo
RooRoo
Roo
 
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
【初心者向け】EC-CUBE プラグイン作成 ハンズオンセミナー @ 名古屋
 

More from yugosugiyama

SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会 ...
SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会                   ...SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会                   ...
SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会 ...yugosugiyama
 
集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返る
集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返る集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返る
集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返るyugosugiyama
 
Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能
Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能
Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能yugosugiyama
 
potatotips#83iOS:Android開発Tips共有会_sugiy.pdf
potatotips#83iOS:Android開発Tips共有会_sugiy.pdfpotatotips#83iOS:Android開発Tips共有会_sugiy.pdf
potatotips#83iOS:Android開発Tips共有会_sugiy.pdfyugosugiyama
 
potatotips #81.pdf
potatotips #81.pdfpotatotips #81.pdf
potatotips #81.pdfyugosugiyama
 

More from yugosugiyama (7)

SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会 ...
SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会                   ...SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会                   ...
SwiftUIで本のUIにチャレンジしてみた!potatotips #87 iOS/Android開発Tips共有会 ...
 
集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返る
集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返る集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返る
集まれSwift好き!Swift愛好会 vol.80 @DeNA 2024/03/07 try!Swift2019振り返る
 
Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能
Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能
Flutter.Thursday@DeNA TechCon2024 うちのアプリのデバッグ機能
 
SwiftGarden.pdf
SwiftGarden.pdfSwiftGarden.pdf
SwiftGarden.pdf
 
potatotips#83iOS:Android開発Tips共有会_sugiy.pdf
potatotips#83iOS:Android開発Tips共有会_sugiy.pdfpotatotips#83iOS:Android開発Tips共有会_sugiy.pdf
potatotips#83iOS:Android開発Tips共有会_sugiy.pdf
 
potatotips #81.pdf
potatotips #81.pdfpotatotips #81.pdf
potatotips #81.pdf
 
K-Dev_LT0.pdf
K-Dev_LT0.pdfK-Dev_LT0.pdf
K-Dev_LT0.pdf
 

開発作業やテストの時にMockでケースごとの UIチェックやテストを書きやすくする