Chromium Chronicle #17: mixins de teste de navegador

Episódio 17:de Toby Huang em São Francisco, Califórnia (janeiro de 2021)
Episódios anteriores

Os testes de navegador são uma forma de teste automatizado para o código do Chromium que são mais completos do que os testes de unidade. Os testes de navegador criam instâncias do navegador e testam vários elementos da interface, em vez de apenas testar a funcionalidade de entrada/saída pura, como os testes de unidade. O teste automatizado integrado é importante para simular a experiência completa do usuário. Ao criar um teste de navegador, muitas vezes você quer executar de maneira programática ações de configuração que o usuário poderia fazer manualmente. Para ajudar você, mixins são um conjunto de ferramentas para realizar uma configuração de teste de navegador não trivial de maneira reutilizável.

Exemplos de mixins úteis:

  • GuestUserMixin para testar o modo de navegação anônima
  • UserPolicyMixin para simular a política do usuário do servidor
  • FakeGaiaMixin para respostas simuladas do servidor GAIA

Você pode criar seus próprios mixins personalizados para diversos fins.

O snippet abaixo faz login como usuário convidado no teste. É importante verificar se o seu recurso funciona no modo de navegação anônima.

O que fazer
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

O LoggedInUserMixin é uma maneira conveniente de fazer login como usuário do Family Link para o teste. Se o recurso afetar algo relacionado à supervisão de crianças, teste seu recurso para usuários supervisionados. Um possível bug é esquecer que usuários menores de idade estão com o modo de navegação anônima desativado ou não podem instalar extensões sem a aprovação dos pais. LoggedInUserMixin é um mixin composto composto de outros mixins.

O que fazer
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};
};

Um dos principais benefícios dos mixins é usar a composição em vez da herança e evitar problemas com a herança múltipla de losangos. Herdar de mais de uma classe base de teste leva ao problema do diamante, mas é possível misturar e combinar mixins sem esse problema. O uso de mixins não elimina totalmente a herança porque a classe de teste do navegador ainda precisa herdar de MixinBasedInProcessBrowserTest, mas felizmente essa classe base é leve e de uso geral.

Recursos