Php 是否可以模拟在测试类中实例化的对象

Php 是否可以模拟在测试类中实例化的对象,php,mocking,phpunit,Php,Mocking,Phpunit,我正在测试的方法如下所示: function X($arg) { // Code ... $object = new Object; // Code ... } 有办法模拟该对象吗?在单元测试中,不能使用PHPUnit模拟对象 根据加载类的方式,可以创建一个“mock”类来替换对象。看起来是这样的: 您的测试文件: class Object { <mock functionality here> } class TestCase extends

我正在测试的方法如下所示:

function X($arg)
{
     // Code ...
     $object = new Object;
     // Code ...
}

有办法模拟该对象吗?

在单元测试中,不能使用PHPUnit模拟对象

根据加载类的方式,可以创建一个“mock”类来替换对象。看起来是这样的:

您的测试文件:

class Object {
   <mock functionality here>
}

class TestCase extends PHPUnit_Framework_TestCase {
 <your tests>
}
类对象{
}
类TestCase扩展了PHPUnit\u框架\u TestCase{
}
但是,如果要在另一个测试中实际测试
对象
,这将导致问题。在这种情况下,您将得到一个致命错误,说明您无法重新定义该类这不是最佳做法。

最好的办法是重构类,以便使用依赖项注入。更改类,使其将对象作为构造函数参数或作为方法签名的一部分


这篇文章可能有帮助:

谢谢,我会使用依赖注入常量,但是我正在测试一个我没有编写的代码,没有依赖注入,它有胖的,真正的胖控制器。对于控制器,我发现你最终得到了大多数人都认为是“集成”测试的东西。通过这种方式,您可以获得API的初始端到端测试,让您可以使用DII进行重构。我开始觉得我在重复我自己,使用PHPUnit进行功能测试,使用Behat进行验收测试,我想我将继续对模型和助手进行单元测试,并对控制器进行验收测试。