您必须模拟该类,而不是执行构造函数,而是构建您需要的值,然后在您的测试中使用模拟。
你有你尝试过的样本吗?您可能需要修改 Core() 类以支持依赖注入(Config 对象和 Session 对象)。
$stub = $this->getMock('Core');
// Configure the stub.
$stub->expects($this->any())
->method('CreateSession')
->will($this->returnValue('foo'));
$this->assertEquals('foo', $stub->CreateSession());
但是,在您的示例代码中,您可能需要修改 Core() 类以接受要传递的 Session 和 Config 对象(通过构造函数或通过 Set 依赖项)以及对 Session 类的一些修改。
class Core
{
private $SessionObject;
private $ConfigObject;
public function __construct(Config $Config, Session $Session) // Constructor Dependency
{
$this->ConfigObject = $Config;
$this->absUrl = $this->ConfigObject::get(Config::ABS_URL);
$this->baseDir = $this->ConfigObject::get(Config::BASE_DIR);
$this->session = $Session;
$this->session->SetSessionType('core');
return $this;
}
}
或者
class Core
{
private $SessionObject;
private $ConfigObject;
public function __construct()
{
}
// Set Dependencies
public function SetConfigObject(Config $Config)
{
$this->ConfigObject = $Config;
}
public function SetSessionObject(Session $Session)
{
$this->SessionObject = $Session;
}
public function BuildObject($SessionType)
{
$this->absUrl = $this->ConfigObject::get(Config::ABS_URL);
$this->baseDir = $this->ConfigObject::get(Config::BASE_DIR);
$this->session->SetSessionType($SessionType);
}
}
现在您的生产代码将正确传递 Config 和 Session 对象,然后您在测试中使用 Mock 对象来传递具有您需要的状态的对象,以便在调用对象的 get 方法时返回硬设置值。