Chromium Chronicle #17: ブラウザテストのミックスイン

エピソード 17: Toby Huang、カリフォルニア州サンフランシスコ(2021 年 1 月)
前のエピソード

ブラウザテストは、より高度な Chrome コードの自動テストの一種です。 単体テストよりエンドツーエンドに 最適化されますブラウザテストでは、ブラウザ インスタンスを作成してテストする 入出力機能だけをテストするのではなく、 単体テストです。統合自動テストは 開発することにありますブラウザテストを作成する際には、 ユーザーが手動で行う設定アクションをプログラムで実行できます。 そのために、mixin は、複雑なコードを ブラウザテストのセットアップを再利用可能な方法で行えます。

有用なミックスインの例:

  • GuestUserMixin: シークレット モードのテスト
  • UserPolicyMixin: サーバーからユーザー ポリシーをモックするために使用します。
  • FakeGaiaMixin: GAIA サーバーからのレスポンスをモックするために使用します。

独自のカスタム ミックスインを作成して、さまざまな用途に使用できます。

以下のスニペットは、テスト用のゲストユーザーとしてログインします。重要なのは 機能がシークレット モードで動作していることを確認してください

すべきこと
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

LoggedInUserMixin は、ファミリー リンク ユーザーとしてログインするのに便利な手段です テストします。機能がお子様に対する管理機能に関連する場合は、 監視対象ユーザーに対して機能をテストしてください。考えられるバグは お子様のユーザーがシークレット モードを無効にしている、またはインストールできないことを忘れる 設定することもできます。LoggedInUserMixin は複合ミックスインです 他の mixin で構成されます

すべきこと
class MyChildBrowserTestClass : public MixinBasedInProcessBrowserTest {
 protected:
  void SetUpOnMainThread() override {
    MixinBasedInProcessBrowserTest::SetUpOnMainThread();
    logged_in_user_mixin_.LogInUser();
  }

 private:
  LoggedInUserMixin logged_in_user_mixin_{&mixin_host_,
                                          LoggedInUserMixin::LogInType::kChild,
                                          embedded_test_server(), this};
};

ミックスインの主なメリットの 1 つは、 ダイヤモンドの多重継承の問題を回避するをご覧ください。 複数のテスト基本クラスから継承すると、ダイヤモンド問題につながります。 ミックスインを混在させながら、この問題を回避できます。ミックスインの使用 継承を完全になくすことはできません。なぜなら、ブラウザのテストクラスは MixinBasedInProcessBrowserTest から継承する必要がありますが、 基本クラスは汎用で軽量です。

リソース