第 17 集:作者:Toby Huang 在加利福尼亚州旧金山(2021 年 1 月)
过往几集
浏览器测试是对 Chromium 代码的一种自动测试形式,比单元测试更端到端。浏览器测试会创建浏览器实例并测试各种界面元素,而不像单元测试那样只测试纯输入/输出功能。集成自动化测试对于模拟用户的端到端体验非常重要。在编写浏览器测试时,您通常需要以编程方式执行用户可以手动执行的设置操作。为了帮助您做到这一点,mixins 是一套工具,用于以可重复使用的方式执行重要的浏览器测试设置。
实用 mixin 的示例:
GuestUserMixin
(用于测试无痕模式)UserPolicyMixin
(用于从服务器模拟用户政策)FakeGaiaMixin
,用于模拟来自 GAIA 服务器的响应
您可以创建自己的自定义 Mixins,用以实现各种目的!
以下代码段以访客身份登录测试。请务必确保您的功能可在无痕模式下正常运行。
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest { private: GuestSessionMixin guest_session_mixin_{&mixin_host_}; };
LoggedInUserMixin
是一种以 Family Link 用户的身份登录测试的便捷方式。如果您的功能会影响与儿童监督相关的所有内容,您应针对受监管用户测试您的功能。一个可能的 bug 是,儿童忘记了无痕模式已停用或者未经家长批准无法安装扩展程序。LoggedInUserMixin
是由其他 mixin 组成的复合 mixin。
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}; };
mixins 的主要好处之一是使用组合而非继承,并避免菱形多重继承方面的问题。
继承多个测试基类会导致钻石问题,但您可以混合搭配 mixin 来避免此问题。使用 mixins 并不会完全摆脱继承问题,因为浏览器测试类仍然需要从 MixinBasedInProcessBrowserTest
继承,但幸运的是,基类是通用的轻量级类。