Chromium Chronicle Nr. 17: Browser-Testmixins

Folge 17:von Toby Huang aus San Francisco, Kalifornien (Januar 2021)
Vorherige Folgen

Browsertests sind eine Form automatischer Tests von Chrom-Code, die mehr Ende-zu-Ende- als Einheitentests sind. Bei Browsertests werden Browserinstanzen erstellt und verschiedene UI-Elemente getestet, anstatt wie bei Unittests nur reine Ein-/Ausgabefunktionen zu testen. Integrierte automatisierte Tests sind wichtig, um die End-to-End-Funktionalität des Nutzers zu simulieren. Beim Schreiben eines Browsertests möchten Sie häufig programmatisch Einrichtungsaktionen ausführen, die der Nutzer manuell ausführen kann. Dazu sind Mixins eine Reihe von Tools, mit denen Sie eine nicht triviale Browsertesteinrichtung auf wiederverwendbare Weise durchführen können.

Beispiele für nützliche Mixins:

  • GuestUserMixin zum Testen des Inkognitomodus
  • UserPolicyMixin zum Simulieren der Nutzerrichtlinie vom Server
  • FakeGaiaMixin für Mocking-Antworten vom GAIA-Server

Sie können eigene benutzerdefinierte Mixins für eine Vielzahl von Zwecken erstellen.

Das folgende Snippet meldet sich als Gastnutzer für den Test an. Sie müssen unbedingt sicherstellen, dass Ihre Funktion im Inkognitomodus funktioniert.

Das sollten Sie tun:
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

Mit LoggedInUserMixin können Sie sich für den Test bequem als Family Link-Nutzer anmelden. Wenn sich die Funktion auf die Elternaufsicht für Kinder auswirkt, solltest du sie für betreute Nutzer testen. Ein möglicher Fehler besteht darin, dass untergeordnete Nutzer den Inkognitomodus deaktiviert haben oder Erweiterungen nicht ohne Zustimmung der Eltern installieren können. LoggedInUserMixin ist ein Mischmix aus anderen Mixins.

Das sollten Sie tun:
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};
};

Einer der Hauptvorteile von Mixins ist die Verwendung der Zusammensetzung anstelle der Vererbung und die Vermeidung von Problemen mit der Mehrfachvererbung von Diamanten. Wenn Sie von mehr als einer Testbasisklasse übernehmen, führt das zum Diamantenproblem. Sie können jedoch Mixins kombinieren und kombinieren, um dieses Problem zu vermeiden. Wenn Sie Mixins verwenden, wird die Übernahme nicht vollständig aufgehoben, da die Browsertestklasse weiter Daten von MixinBasedInProcessBrowserTest übernehmen muss. Glücklicherweise ist diese Basisklasse jedoch allgemein und unkompliziert.

Ressourcen