PHPUnit - 如何存根整个父 class?

PHPUnit - How do I stub the entire parent class?

我有一个糟糕的情况,我想测试的 class 正在扩展另一个 class,它有一个非常复杂的 public static 方法。如果父 class 没有扩展所需的其他 classes,这就不是问题。具体来说,我需要 \Illuminate\Database\Eloquent\Model 仍然被扩展。对于可能的重构以使其更易于测试,我束手无策。

有没有什么方法可以存根或更改有问题的 class 的父级,同时仍然允许模型 class 执行?

您应该使用模拟对象。 看这里:https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.mock-objects

也许您可以创建一个 YourClassTestCase 来扩展您正在测试的 class。然后,在 YourClassTestCase 中使用简化的 return 覆盖静态方法并在 YourClassTestCase 上启动测试。

所以你将有 YourTest -> yourClassTestCase -> YourClass -> ParentWithStaticMethod.