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

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

ブラウザテストは Chromium コードの自動テストの形式であり、単体テストよりもエンドツーエンドで実施されます。ブラウザテストでは、単体テストのように純粋な入出力機能をテストするだけではなく、ブラウザ インスタンスを作成し、さまざまな UI 要素をテストします。統合された自動テストは、ユーザーのエンドツーエンドのエクスペリエンスをシミュレーションするために重要です。ブラウザのテストを作成する際に、ユーザーが手動で行えるセットアップ アクションをプログラムで実行します。このような場合のために、mixins は、再利用可能な方法で簡単なブラウザのテスト設定を実行するためのツールスイートです

便利なミックスインの例:

  • シークレット モードをテストする場合の GuestUserMixin
  • UserPolicyMixin: サーバーのユーザー ポリシーをモックします
  • FakeGaiaMixin: Gaia サーバーからのレスポンスを模擬します。

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

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

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

LoggedInUserMixin を使用すると、テスト用にファミリー リンク ユーザーとして簡単にログインできます。機能が児童向け管理機能に関連する場合は、管理対象のユーザーに対して機能をテストする必要があります。たとえば、子ユーザーがシークレット モードを無効にしていることを忘れていたり、親の承認なしで拡張機能をインストールできないことがあります。LoggedInUserMixin は、他のミックスインで構成される複合ミックスインです。

すべきこと
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 から継承する必要があるため、ミックスインを使用しても継承が完全になくなるわけではありませんが、基本クラスは汎用的で軽量です。

関連情報