Slide 1

Slide 1 text

POTATOTIPS #73 2021/03/26 @MedPeer, Inc. ɹ ਿࢁɹ༏ޛ

Slide 2

Slide 2 text

3&"%.& w /BNFਿࢁ༏ޛ:VHP4VHJZBNB w "HFࡀ w 'SPNਆಸ઒ݝ౻୔ࢢ w +PC4)08300.גࣜձࣾ d  w )PCCZྉཧɺΞχϝɺࣗసंɺςχε w 2VBMJ fi DBUJPOڭһ໔ڐ தֶߴ౳ֶߍࣾձՊશൠ

Slide 3

Slide 3 text

ࠓ೔ͷൃද಺༰ ։ൃ࡞ۀ΍ςετͷ࣌ʹMockͰέʔε͝ͱ ͷUIνΣοΫ΍ςετΛॻ͖΍͘͢͢Δ σϞΞϓϦ

Slide 4

Slide 4 text

։ൃ΍ςετΛॻ࣌͘ʹࠔΔ͜ͱ • API͕Ͱ͖ͯͳͯ͘ɺAPI௨৴͕Ͱ͖ͳ͍ • Ϧετ͕ෳ਺ɺ1ͭɺۭͳͲෳ਺ͷϢʔεέʔεͷUIνΣοΫ༻ͷ σʔλͷ༻ҙ͕େม • ্هͷΑ͏ͳϢʔεέʔεͷUIΛݸผʹ͙֬͢ೝ͢Δͷ͕೉͍͠ • ্هͷΑ͏ͳϢʔεέʔεͷςετίʔυΛ໢ཏతʹॻ͘ͷ͕೉͍͠

Slide 5

Slide 5 text

̍ͭͷվળҊͱͯ͠ • DIΛ࢖ͬͯɺϢʔεέʔε͝ͱͷσʔλ͕ฦΔΑ͏ͳ࣮૷Λ༻ҙ 1. Dependency InjectionΛ࢖ͬͯɺ௨৴ॲཧͷAPI༻/Mock༻ͷ ClassΛ੾Γସ͑ΒΕΔΑ͏ʹ͢Δɻ 2. Ϣʔεέʔε෼ͷMockTypeΛࣄલʹఆ͓͖ٛͯ͠ɺDebugMenu ͔ΒͦΕΒΛ੾Γସ͑ΒΕΔΑ͏ʹ͢Δɻ 3. MockͷClass͸ઃఆͨ͠MockTypeʹԠͨ͡஋Λฦ͢Α͏ʹ͢Δɻ

Slide 6

Slide 6 text

ॾ஫ҙ • ൃද͕࣌ؒ୹͍ͨΊɺ࣮૷ͷৄࡉ͸GithubͷϦϙδτϦΛ֬ೝͩ͘͞ ͍

Slide 7

Slide 7 text

1. Dependency InjectionΛ࢖ͬͯɺ௨৴ॲཧͷAPI ༻/Mock༻ͷClassΛ੾Γସ͑ΒΕΔΑ͏ʹ͢Δɻ • API઀ଓ༻ͷΫϥεͱMock༻ͷclassΛDIΛ࢖ͬͯɺ੾Γସ͑ΒΕΔΑ͏ʹ͢Δ • σϞΞϓϦͰ͸ɺDIContainerͱͯ͠DependenciesΛϕʔεͯ͠ɺҎԼͷΑ͏ʹ ࢖ͬͯ·͢ɻ • @InjectͱܕΛ͚ͭΔͱɺDIContainerʹઃఆͨ͠ΠϯελϯεΛࢀরͰ͖Δ • ࢀরΛ͍࣋ͬͯΔ͚ͩͳͷͰɺDebugMenuͳͲ͔ΒΠϯελϯεΛ੾Γସ͑Δ͜ ͱ͕Ͱ͖Δɻ @Inject private var mockService: MockProtocol

Slide 8

Slide 8 text

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 }

Slide 9

Slide 9 text

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)”))) …… }

Slide 10

Slide 10 text

Mock੾Γସ͑ͷϝϦοτ • APIͷ࣮૷લͰ΋։ൃͰ͖Δɻ • ςετ͕(ݸਓతʹ͸)ॻ͖΍͍͢ • Ϣʔεέʔε͝ͱͷUIνΣοΫɾςετέʔεΛ໢ཏతʹ͔͚Δ • MockType͝ͱͷςετΛ࡞੒͢Δ • Ϣʔεέʔε͕૿ݮͯ͠΋ɺ௥Ճɾ࡟আ͕༰қ • InHouseͳͲ഑෍༻ͷΞϓϦ(୺຤ͷΈ)Ͱ΋ݕূՄೳ

Slide 11

Slide 11 text

Mock੾Γସ͑ͷσϝϦοτ • MockType΍MockΫϥεͷॲཧΛ࢓༷௨Γʹॻ͔ͳ͍ͱҙຯ͕ͳ͍ • ౰ͨΓલͰ͕͢ɻɻ • API௨৴(URLRequestͳͲ)΍DecodableͳͲjsonͷparseॲཧͷಈ࡞֬ೝ΍ςε τ͸Ͱ͖ͳ͍ • Charles࢖ͬͯಈ࡞֬ೝͨ͠Γɺผ్Parse༻ͷςετͳͲ͸ॻ͘ඞཁ͕͋Δ • ࠷ॳͷ४උ͸গ͠େม • ͦͷޙͷԣల։͸ͦ͜·ͰखؒͰ͸ͳ͍

Slide 12

Slide 12 text

݁࿦ ։ൃ࡞ۀ΍ςετͷ࣌ͷ࡞ۀ͕͠΍͍͢Α ͏ͳ؀ڥΛ੔͑Δ͜ͱ͸େࣄ

Slide 13

Slide 13 text

ऴܶ

Slide 14

Slide 14 text

༧ࠂ

Slide 15

Slide 15 text

࣍ճ ऴΘΔ3Yɺ࢝·Δ$PNCJOF Ծ