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

时间:2014-10-31 10:23:16

标签: php mocking phpunit

我正在测试的方法如下:

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

有没有办法模仿那个对象?

1 个答案:

答案 0 :(得分:1)

在单元测试中没有PHPUnit Mock对象,你不能。

根据您加载课程的方式,您可以创建一个" mock"将替换该对象的类。这看起来像这样:

您的测试文件:

class Object {
   <mock functionality here>
}

class TestCase extends PHPUnit_Framework_TestCase {
 <your tests>
}

但是,如果您想在另一个测试中实际测试Object,这将导致问题。在这种情况下,您将收到致命错误,指出您无法重新定义该类。 这不是最佳做法。

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

这篇文章可能会有帮助:http://misko.hevery.com/2008/07/08/how-to-think-about-the-new-operator/