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

Androidアプリのテスト駆動開発入門

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 Androidアプリのテスト駆動開発入門

Avatar for tonionagauzzi

tonionagauzzi

June 14, 2024
Tweet

More Decks by tonionagauzzi

Other Decks in Programming

Transcript

  1. (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ

    簡体字 / 日本サーバー の組合せ 繁体字 / 日本サーバー の組合せ その他 / 日本サーバー の組合せ 日本語 / 米国サーバー の組合せ 英語 / 米国サーバー の組合せ 簡体字 / 米国サーバー の組合せ 繁体字 / 米国サーバー の組合せ その他 / 米国サーバー の組合せ 接続先を判定できなかった場合、日本語 / 日本サーバー の組合せとなる (2) ログイン画面でヘルプリンクが押されると、1.で生成したURLを Chromeに渡し、ヘルプページを開く CHECK LIST 13
  2. // テスト @Test fun `日本語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { //

    Given(前提条件) val language = "ja" val country = "JP" // When(操作) val url = get(language = language, country = country) // Then(結果) Truth.assertThat(url).isEqualTo("https://localhost/help/ja/JP/") } // 実装 fun get(language: String, country: String): String { return "" } (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ RED 14
  3. // テスト @Test fun `日本語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { //

    Given(前提条件) val language = "ja" val country = "JP" // When(操作) val url = get(language = language, country = country) // Then(結果) Truth.assertThat(url).isEqualTo("https://localhost/help/ja/JP/") } // 実装 fun get(language: String, country: String): String { return "https://localhost/help/ja/JP/" } (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ GREEN 15
  4. // テスト @Test fun `日本語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { //

    Given(前提条件) val language = "ja" val country = "JP" // When(操作) val url = get(language = language, country = country) // Then(結果) Truth.assertThat(url).isEqualTo("https://localhost/help/ja/JP/") } @Test fun `英語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { // Given val language = "en" val country = "JP" // When val url = get(language = language, country = country) // Then Truth.assertThat(url).isEqualTo("https://localhost/help/en/JP/") } // 実装 fun get(language: String, country: String): String { return "https://localhost/help/ja/JP/" } (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ RED 16
  5. // テスト @Test fun `日本語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { //

    Given(前提条件) val language = "ja" val country = "JP" // When(操作) val url = get(language = language, country = country) // Then(結果) Truth.assertThat(url).isEqualTo("https://localhost/help/ja/JP/") } @Test fun `英語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { // Given val language = "en" val country = "JP" // When val url = get(language = language, country = country) // Then Truth.assertThat(url).isEqualTo("https://localhost/help/en/JP/") } // 実装 fun get(language: String, country: String): String { if (language == "en") { return "https://localhost/help/en/JP/" } else { return "https://localhost/help/ja/JP/" } } (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ GREEN 17
  6. // テスト @Test fun `日本語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { //

    Given(前提条件) val language = "ja" val country = "JP" // When(操作) val url = generateHelpLink(language = language, country = country) // Then(結果) Truth.assertThat(url).isEqualTo("https://localhost/help/ja/JP/") } @Test fun `英語 / 日本サーバー の組合せで、ヘルプページのURLを生成する` { // Given val language = "en" val country = "JP" // When val url = generateHelpLink(language = language, country = country) // Then Truth.assertThat(url).isEqualTo("https://localhost/help/en/JP/") } // 実装 fun generateHelpLink(language: String, country: String): String { val helpPath = when (language) { "en" -> "en/JP" else -> "ja/JP" } return "https://localhost/help/$helpPath/" } (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ REFACTOR 18
  7. (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ

    簡体字 / 日本サーバー の組合せ 繁体字 / 日本サーバー の組合せ その他 / 日本サーバー の組合せ 日本語 / 米国サーバー の組合せ 英語 / 米国サーバー の組合せ 簡体字 / 米国サーバー の組合せ 繁体字 / 米国サーバー の組合せ その他 / 米国サーバー の組合せ (2) ログイン画面でヘルプリンクが押されると、1.で生成したURLを Chromeに渡し、ヘルプページを開く 20
  8. (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ

    簡体字 / 日本サーバー の組合せ 繁体字 / 日本サーバー の組合せ その他 / 日本サーバー の組合せ 日本語 / 米国サーバー の組合せ 英語 / 米国サーバー の組合せ 簡体字 / 米国サーバー の組合せ 繁体字 / 米国サーバー の組合せ その他 / 米国サーバー の組合せ (2) ログイン画面でヘルプリンクが押されると、1.で生成したURLを Chromeに渡し、ヘルプページを開く 21
  9. private val activity = Robolectric.buildActivity(FragmentActivity::class.java).create().start().resume().get() // テスト @Test fun `ログイン画面でヘルプリンクが押されると、生成したURLをChromeに渡し、ヘルプページを開く`()

    { // Given (前提条件: ログイン画面を開いている) val fragment = Fragment() activity.add(fragment) val helpLinkUrl = generateHelpLink(language = "ja", country = "JP") // When (操作:ヘルプリンクを押す) fragment.openBrowser(url = helpLinkUrl) // Then (結果:ChromeがURLを開く) val openedActivity = Shadows.shadowOf(activity).nextStartedActivity val openedPackage = openedActivity.getPackage() Truth.assertThat(openedPackage).isEqualTo("com.android.chrome") val openedUrlString = openedActivity.data.toString() Truth.assertThat(openedUrlString).isEqualTo(helpLinkUrl) } // 実装 fun Fragment.openBrowser(url: String) { } (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ 簡 簡 簡 / 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 繁体字 / 日本サーバー の組合せ その他 / 日本サーバー の組合せ 日本語 / 米国サーバー の組合せ 英語 / 米国サーバー の組合せ 簡体字 / 米国サーバー の組合せ 繁体字 / 米国サーバー の組合せ その他 / 米国サーバー の組合せ 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 / 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 (2) ログイン画面でヘルプリンクが押されると、1.で生成したURLを Chromeに渡し、ヘルプページを開く 23
  10. private val activity = Robolectric.buildActivity(FragmentActivity::class.java).create().start().resume().get() // テスト @Test fun `ログイン画面でヘルプリンクが押されると、生成したURLをChromeに渡し、ヘルプページを開く`()

    { // Given (前提条件: ログイン画面を開いている) val fragment = Fragment() activity.add(fragment) val helpLinkUrl = generateHelpLink(language = "ja", country = "JP") // When (操作:ヘルプリンクを押す) fragment.openBrowser(url = helpLinkUrl, errorCallback = { e -> fail(e) }) // Then (結果:ChromeがURLを開く) val openedActivity = Shadows.shadowOf(activity).nextStartedActivity val openedPackage = openedActivity.getPackage() Truth.assertThat(openedPackage).isEqualTo("com.android.chrome") val openedUrlString = openedActivity.data.toString() Truth.assertThat(openedUrlString).isEqualTo(helpLinkUrl) } // 実装 fun Fragment.openBrowser( url: String, errorCallback: (e: Exception) -> Unit = { e -> // エラー処理 }, ) { try { val chromeIntent = Intent(Intent.ACTION_VIEW, url.toUri()) chromeIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK chromeIntent.setPackage("com.android.chrome") startActivity(chromeIntent) } catch (e: Exception) { errorCallback(e) } } (1) 接続先情報と端末の言語設定に応じたヘルプページのURLを生成する 日本語 / 日本サーバー の組合せ 英語 / 日本サーバー の組合せ 簡 簡 簡 / 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 繁体字 / 日本サーバー の組合せ その他 / 日本サーバー の組合せ 日本語 / 米国サーバー の組合せ 英語 / 米国サーバー の組合せ 簡体字 / 米国サーバー の組合せ 繁体字 / 米国サーバー の組合せ その他 / 米国サーバー の組合せ 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 / 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 簡 (2) ログイン画面でヘルプリンクが押されると、1.で生成したURLを Chromeに渡し、ヘルプページを開く 24