The Chromium Chronicle #17: browsertestmixen

Aflevering 17: door Toby Huang in San Francisco, CA (januari 2021)
Vorige afleveringen

Browsertests zijn een vorm van geautomatiseerd testen voor chroomcode die meer end-to-end zijn dan unit-tests. Browsertests creëren browserinstanties en testen verschillende UI-elementen in plaats van alleen maar pure invoer-/uitvoerfunctionaliteit te testen, zoals unit-tests dat doen. Geïntegreerd geautomatiseerd testen is belangrijk voor het simuleren van de end-to-end ervaring van de gebruiker. Wanneer u een browsertest schrijft, wilt u vaak programmatisch instellingsacties uitvoeren die de gebruiker handmatig zou kunnen uitvoeren. Om u hierbij te helpen, zijn mixins een reeks tools waarmee u niet-triviale browsertestinstellingen op een herbruikbare manier kunt uitvoeren.

Voorbeelden van nuttige mixen:

  • GuestUserMixin voor het testen van de incognitomodus
  • UserPolicyMixin voor het bespotten van gebruikersbeleid vanaf de server
  • FakeGaiaMixin voor spottende reacties van de Gaia-server

U kunt uw eigen aangepaste mixen maken voor een breed scala aan doeleinden!

Met het onderstaande fragment logt u in als gastgebruiker voor uw test. Het is belangrijk om ervoor te zorgen dat uw functie in de incognitomodus werkt.

Doen
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

LoggedInUserMixin is een handige manier om in te loggen als Family Link-gebruiker voor uw test. Als uw functie van invloed is op zaken die te maken hebben met toezicht op kinderen, moet u uw functie testen op gebruikers onder toezicht . Een mogelijke bug is dat we vergeten dat onderliggende gebruikers de incognitomodus hebben uitgeschakeld of geen extensies kunnen installeren zonder toestemming van hun ouders. LoggedInUserMixin is een samengestelde mix die is samengesteld uit andere mixen.

Doen
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};
};

Een van de belangrijkste voordelen van mixins is het gebruik van compositie in plaats van overerving, en het vermijden van problemen met meervoudige overerving van diamanten . Het erven van meer dan één testbasisklasse leidt tot het diamantprobleem, maar u kunt mixen mixen en matchen terwijl u dit probleem vermijdt. Het gebruik van mixins elimineert de overerving niet volledig, omdat de browsertestklasse nog steeds moet erven van MixinBasedInProcessBrowserTest , maar gelukkig is die basisklasse algemeen bruikbaar en licht van gewicht.

Bronnen