PHPUnit 从 9 升到 10,跑起来报 Data Provider method OrderTest::data() is not static,三十多个用例全红。乍看像缓存或者权限的锅,追下去往往不是。

public static function data(): array {
  return [['a', 1], ['b', 2]];
}
./vendor/bin/phpunit --migrate-configuration

追下去是这么回事:新版本要求数据提供者声明成静态且公开,老代码里靠实例属性和 this 构造数据的写法直接不合法,返回结构也收紧了,靠升级一次就全过基本不可能。

「PHPUnit 升级不兼容」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,给所有数据提供者补上 static 关键字;把依赖实例状态的数据改成常量;用自带迁移命令顺带升级配置文件。

验收就看一点,全部用例恢复绿色,配置文件和 PHPUnit 10 的要求匹配。

作者 9823189