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

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

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

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