Slide 1

Slide 1 text

ΞϓϦΛे਺ݸ࡞ͬͨ ๻͕ॳΊͯॻ͍ͨ ςετͷ࿩ iOS Test Night #7

Slide 2

Slide 2 text

ࣗݾ঺հ ๏খੁɹྒʢ28ʣ ๏Nagisa, inc. ๏ ອըPFࣄۀ෦ ๏ ϚϯΨZERO ๏ iOSΤϯδχΞ ๏ςετྺ ๏ ̐ϲ݄ ๏Social ๏ Twitter: @ryo_kosuge ๏ Github: ryokosuge

Slide 3

Slide 3 text

ࠓ೔࿩͢͜ͱ

Slide 4

Slide 4 text

ࠓ೔࿩͢͜ͱ ๏ ͳͥࠓ·ͰςετΛॻ͍ͯ͜ͳ͔͔ͬͨ ๏ ͳͥςετΛॻ͘Α͏ʹͳ͔ͬͨ ๏ ςετΛॻ͘͜ͱʹΑͬͯಘͨ΋ͷ

Slide 5

Slide 5 text

ٯʹࠓ೔࿩͞ͳ͍͜ͱ ๏ ޮ཰ͷ͍͍ςετͷ࿩ ๏ CI / CDͷ࿩ ๏ ςετͷॻ͖ํ ͳͲͳͲ

Slide 6

Slide 6 text

ͳͥࠓ·ͰςετΛॻ͍ͯ͜ͳ͔͔ͬͨ

Slide 7

Slide 7 text

ͳͥࠓ·ͰςετΛॻ͍ͯ͜ͳ͔͔ͬͨ ๏ ΞϓϦͷΫϥογϡϑϦʔ཰Λ୲อ͢Ε͹ྑ͠ ๏ ࡞ͬͯ͸࡟আ͢Δػೳ΋͋Γɺιʔείʔυࣗମ ͷण໋͕୹͍ ๏ ϝδϟʔΞοϓσʔτ... ๏ ΄΅̍ਓͰ࡞Δ

Slide 8

Slide 8 text

ͳͥςετΛॻ͘Α͏ʹͳͬͨͷ͔ ๏ ෳ਺ਓͰΞϓϦ։ൃ͢ΔػձΛಘΒΕͨʂ ๏ Ұॹʹ࡞ͬͨਓ͕ςετॻ͘ਓͩͬͨ ๏ ৽ن։ൃͷͨΊɺSwift4ͰCodable࢖ͬͯΈͨ

Slide 9

Slide 9 text

Swift4ͰCodable࢖ͬͯΈͨ ๏ ࠓ·ͰAPIKit & Himotoki ๏ JSONͷdecodeॲཧΛओʹ ๏ ॻ͖ํ͸άάΕ͹ग़ͯ͘Δ͕ɺ͍͋ͬͯΔ͔Θ͔Βͳ͍... ๏ ؒҧͬͨ·Μ·mergeͯ͠࢖͔ͬͯΒमਖ਼͢ΔͷͰ͸஗͍ ๏ merge͢Δͱ͖͸׬શʹػೳ͢Δ͜ͱΛ໿ଋ͍ͯ͠Δ΂͖ -> ςετ͕ඞਢʂʂ

Slide 10

Slide 10 text

ςετΛॻ͘͜ͱʹΑͬͯಘͨ΋ͷ ๏ dynamic framework࡞੒࣌ͷ֬ೝ͢Δ؀ڥ ๏ ੜJSONΛdecodeग़དྷΔ͔֬ೝ ๏ ࡞੒ͨ͠Ϋϥεͷ࢖͍ํͷઆ໌ ๏ ίϝϯτͱڞʹهड़͢Δͱঘྑ͠ ๏ ҆৺ײ ๏ ςετͰ͸decodeग़དྷͳ͔͚ͬͨͲAPIୟ͍ͯdecodeग़དྷͳ ͔ͬͨΒϨεϙϯενΣοΫ

Slide 11

Slide 11 text

ॻ͍ͨςετίʔυ public struct Person: Codable { enum CodingKeys: String, CodingKey { case firstName = "first_name" case lastName = "last_name" } public let firstName: String public let lastName: String }

Slide 12

Slide 12 text

ॻ͍ͨςετίʔυ import XCTest class PersonTests: XCTestCase { /// σίʔυॲཧ͕ग़དྷΔ͔Ͳ͏͔ func testsDecode() { let decoder = JSONDecoder() let value = "{\"first_name\": \"kosuge\", \"last_name\": \"ryo\"}" do { let object = try decoder.decode(Person.self, from: value.data(using: .utf8)!) print(object) } catch let e { XCTFail(e.localizedDescription) } } }

Slide 13

Slide 13 text

ॻ͍ͨςετίʔυ import XCTest class PersonTests: XCTestCase { /// ஋͕଍Γͣɺσίʔυॲཧʹࣦഊ͢Δ͔Ͳ͏͔ func testsFailDecode() { let decoder = JSONDecoder() let value = "{\"first_name\": \"kosuge\"}" let object = try? decoder.decode(Person.self, from: value.data(using: .utf8)!) XCTAssertNil(object) // nil͡Όͳ͖Ό͍͚ͳ͍ } }

Slide 14

Slide 14 text

ςετΛඳ͖࢝ΊΔࡍʹඞཁͳ΋ͷ ๏ Unit Testͷ࡞੒ํ๏ͷ஌ݟ ๏ άάΕ͹͙͢Θ͔Γ·͢ʂ ๏ XCTestͷ؆୯ͳ࢖͍ํ ๏ ࣦഊͨ͠ΒXCTFail(_ message:) ๏ nilνΣοΫ͸ XCTAssertNil(expression:) ๏ ͚ͩΘ͔Ε͹ଟ෼࠷ॳ͸େৎ෉

Slide 15

Slide 15 text

ςετΛඳ͖࢝ΊΔࡍʹඞཁͳ΋ͷ ๏ ςετʹ͍ͭͯ࿩ͤΔਓ ๏ ςετͷॻ͖ํʹࠔͬͨΒ૬ஊͰ͖Δ ๏ ͍͍ͩͨɺʮʓʓͷػೳΛ࣮૷ͨ͠Β͔××Λ˚˚͢Δςε τΛʙʯͬͯ૬ஊ͍ͯ͠Δ͏ͪʹςετΛॻ͘खॱ͕׬੒ ͢Δ ๏ ͦͨ͠Β͋ͱ͸ݴ༿௨Γ۪௚ʹॻ͘ ๏ ςετॻ͍ͨΒࣗຫͨ͘͠ͳΔ

Slide 16

Slide 16 text

·ͱΊ ๏ frameworkΛ੾Γ෼͚ͨ࣌ͷ֬ೝ؀ڥͱͯ͠iOS Unit Test͸࠷ద ๏ ػೳͷςετͱͳΔͱॏ͘ײͪ͡Ό͏͚Ͳɺ֬ೝ ͢Δ؀ڥͱࢥ͑͹ͦ͜·ͰΊΜͲ͘͘͞ͳ͘ͳΔ ๏ Quick͸Ͳ͏ͱ͔ςετͷٕज़ʹؔͯ͠͸࠙਌ձͰڭ ͍͑ͯͩ͘͞

Slide 17

Slide 17 text

͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠