Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHub Copilotを使って ちょっと楽にUnitTestを書けるようになった

GitHub Copilotを使って ちょっと楽にUnitTestを書けるようになった

DeNA×STORES×ラクマ iOS Meetup!! の登壇資料です。

Clean Swiftにおいてどのようなテストを書いているのか、そして昨今話題のGitHub Copilotがこのテストを書くのをちょっと…いやかなり楽にしてくれたのでその経験をご紹介します。

totokit4

May 22, 2023
Tweet

More Decks by totokit4

Other Decks in Programming

Transcript

  1. 自己紹介 2 とと / @totokit4 平口 咲 (ひらぐち さき) STORES

    決済チームでiOSエンジニアやってます。 関西型言語歴27年です。 今週、関西へUターンします。 関東には6年いました。 関西弁のカンを取り戻す 必要がありそうです。
  2. Clean Swift 超概要1 11 View Contoroller Interactor Presenter イベント検知 したで!

    処理するわ! ホレ結果 ほんじゃ 画面反映たのむわ〜
  3. Interactorの実装 14 class HogeInteractor { // HogePresentationLogicはPresenterに適用しているプロトコル var presenter: HogePresentationLogic

    = HogePresenter() func doSomething(request: Hoge.Something.Request) { // 〜なんか処理〜 presenter.presentSomething(response: .init()) } }
  4. InteractorTestsの実装 15 class HogeInteractorTests: XCTestCase { var sut: HogeInteractor! //

    MARK: - Test doubles (Presenterの代替物) class HogePresentationLogicSpy: HogePresentationLogic { var presentSomethingCalled = false func presentSomething(response: Hoge.Something.Response) { presentSomethingCalled = true } }
  5. InteractorTestsの実装 16 func testDoSomething() { // Given let spy =

    HogePresentationLogicSpy() sut.presenter = spy // When sut.doSomething(request: .init()) // Then XCTAssertTrue(spy.presentSomethingCalled) }
  6. このテストを書くのに必要な手順 21 1. ここに`Presenterの関数名+Called = false`を追加 2. プロトコルで定義された関数を追加 3. 関数内で`Presenterの関数名+Called

    = true`を追加 4. テストケースを適当なところからコピー&ペースト 5. `test関数名(頭文字を大文字に)`に変更 6. Interactorの関数を呼び出す 7. 期待値に`spy.Presenterの関数名+Called`を入れる 8. コメントを`Interactorの関数 should ask the presenter to Presenterの関数名`に する ※読まんでええやつ
  7. 感想 29 • 8stepから、4stepへ半減 🎉 • 精度は結構いける⭕ • ヒューマンエラー的なものが減る⭕ •

    サジェストまではワンテンポ待つ🔺 • 単純作業を肩代わりしてくれる⭕ • おかげで複雑なテストを書くのに集中力と工数を使える 🎉
  8. #2C85DE #F79A40 #EB75AA #EE5253 #10AC84 #6833D4 #0AB0DE #F5CC00 Text A

    Text Text Text Text Text Text Text Text Text A Text Text Text Text Text Text Text Text