Хроника Chromium #17: Тестовые миксины браузера

Эпизод 17: Тоби Хуанг, Сан-Франциско, Калифорния (январь 2021 г.)
Предыдущие серии

Браузерные тесты — это форма автоматического тестирования кода Chromium, которая является более сквозной, чем модульные тесты. Браузерные тесты создают экземпляры браузера и тестируют различные элементы пользовательского интерфейса, а не просто тестируют чистую функциональность ввода-вывода, как это делают модульные тесты. Интегрированное автоматизированное тестирование важно для моделирования сквозного взаимодействия пользователя. При написании теста браузера часто требуется программно выполнить действия по настройке, которые пользователь мог бы выполнить вручную. Чтобы помочь вам в этом, миксины представляют собой набор инструментов для выполнения нетривиальной настройки тестирования браузера с возможностью повторного использования.

Примеры полезных миксинов:

  • GuestUserMixin для тестирования режима инкогнито
  • UserPolicyMixin для имитации пользовательской политики с сервера
  • FakeGaiaMixin для имитации ответов сервера Gaia

Вы можете создавать свои собственные миксины для самых разных целей!

Фрагмент ниже позволяет войти в систему в качестве гостя для вашего теста. Важно убедиться, что ваша функция работает в режиме инкогнито.

Делать
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

LoggedInUserMixin — это удобный способ войти в систему как пользователь Family Link для прохождения теста. Если ваша функция влияет на что-либо, связанное с контролем детей, вам следует протестировать ее для контролируемых пользователей . Возможная ошибка заключается в том, что дети-пользователи забывают, что режим инкогнито отключен или не могут устанавливать расширения без разрешения родителей. 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};
};

Одним из основных преимуществ миксинов является использование композиции вместо наследования и избежание проблем с алмазным множественным наследованием . Наследование от более чем одного тестового базового класса приводит к проблеме ромба, но вы можете смешивать и сопоставлять миксины, избегая этой проблемы. Использование примесей не избавляет полностью от наследования, поскольку тестовый класс браузера по-прежнему должен наследовать от MixinBasedInProcessBrowserTest , но, к счастью, этот базовый класс является универсальным и легковесным.

Ресурсы