WordPress 工程化与高阶实践

WordPress单元测试入门:wp_mock与Brain Monkey实战

WordPress单元测试入门:wp_mock与Brain Monkey实战

WordPress单元测试入门:wp_mock与Brain Monkey实战

WordPress插件和主题的测试覆盖率普遍低于20%,不是因为开发者不重视质量,而是因为WordPress的全局函数和全局状态让传统单元测试几乎无法进行。wp_mock和Brain Monkey这两个库解决了这个问题,而且上手成本比想象中低得多。

为什么不能直接Mock WordPress函数

如果你在PHPUnit中直接尝试Mock wp_remote_get(),你会得到一个fatal error:函数未定义。WordPress核心函数没有命名空间,它们在全局作用域中——而PHPUnit在自己的进程中运行,WordPress核心根本没有被加载。Brain Monkey通过PHP的uopz/runkit扩展在运行时动态替换函数定义,让你可以在不加载WordPress的情况下Mock任何WP函数。

典型测试场景

Brain\Monkey\Functions\when('get_option')
    ->justReturn('mocked_value');
$this->assertSame('mocked_value', get_option('any_key'));

对于带副作用的函数(如wp_insert_post),用wp_mock验证调用行为:检查函数是否被调用、传入了什么参数、调用了多少次,而非验证数据库状态。

何时用集成测试替代单元测试

涉及真实数据库交互(WPDB)、REST API端点和多插件交互的场景,单元测试覆盖不了。这时用wp-env + Playwright做端到端的集成测试更合适——Docker拉起完整WP环境,Playwright模拟用户操作。单元测试和集成测试的比例建议保持在7:3。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注