我一直在用头撞墙试图弄清楚这一点。我正在尝试模拟私有服务属性,以便在测试期间不会调用它的方法。
我一直无法在网上找到相关的解决方案。
class MyClass
{
private $service
public function __construct($service) {
$this->service = $service;
}
public function myMethod()
{
$this->service->doStuff();
...do other stuff that I need to test...
}
}
在测试类中,我需要模拟$service,而不是调用doStuff()
use PHPUnit\Framework\TestCase;
class MyClassTest extends TestCase
{
public function setup()
{
...
}
public function testMyMethod()
{
$myClass = clone $this->app['MyClass'];
// Need to mock doStuff() here, so it is not called.
$myClass->service = $this->mockDoStuff();
//...test the other stuff in myMethod()...
}
}
我已经研究了 RelfectionClasses,但我不确定他们能在这里帮助我。我知道更改$service为public会起作用,但不幸的是,这不是一个选择。感谢各位大侠的帮助,感激不尽!
繁星淼淼