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

Swiftでテスト時のみ『private』にアクセスする方法

 Swiftでテスト時のみ『private』にアクセスする方法

mobile_stmn #1 で登壇した際の資料になります

Ryu-nakayama

July 14, 2023
Tweet

More Decks by Ryu-nakayama

Other Decks in Programming

Transcript

  1. 自己紹介 2 中山 龍 (なかやま りゅう) • Chatwork株式会社 ◦ モバイルアプリケーション開発部

    ◦ iOSエンジニア ◦ 2023年4月 新卒として入社 ◦ 社内最年少 (2002年6月生まれの21歳) • 愛知県在住 ◦ フルリモート勤務 • 初めてのLTで緊張してます! @ryu_develop
  2. 今回想定する状況 9 class Sample { public static let shared =

    Sample() private var value = 0 } • privateなプロパティ『value』を持っているclass • シングルトン
  3. class Sample { public static let shared = Sample() private

    var value = 0 func getter() -> Int { return value } func setter(value: Int) { self.value = value } } 何も考えずに『private』にアクセスするとしたら 16 getterとsetterを持たせる ↓ privateへのget / set が可能 になる
  4. Build Configurationの追加方法 23 PROJECT 内の Info で Configurations左下の+ をクリック し、Duplicate

    “Debug” Configurationを選択 生成されたものの名前をTestにする 1.
  5. class Sample { public static let shared = Sample() private

    var value = 0 #if TEST func getter() -> Int { return value } func setter(value: Int) { self.value = value } #endif } テストで分岐させてみる 28 getterとsetterを #if TEST 〜 #endifで囲むと、 テスト以外では存在しないこと にできる
  6. つまり 29 class Sample { public static let shared =

    Sample() private var value = 0 func getter() -> Int { return value } func setter(value: Int) { self.value = value } } テストビルド時 class Sample { public static let shared = Sample() private var value = 0 } テスト以外のビルド時 テストビルド以外の際にはgetter とsetterが無い扱いとなる