我正在尝试测试一个管理数据库中数据访问的类(本质上是 CRUD)。我们使用的 DB 库恰好有一个 API,您首先通过静态调用获取表对象:
function getFoo($id) {
$MyTableRepresentation = DB_DataObject::factory("mytable");
$MyTableRepresentation->get($id);
... do some stuff
return $somedata
}
...你明白了。
我们正在尝试测试此方法,但要模拟 DataObject 的东西,以便 (a) 我们不需要实际的数据库连接来进行测试,并且 (b) 我们甚至不需要包含 DB_DataObject 库来进行测试.
但是,在 PHPUnit 中,我似乎无法让 $this->getMock() 适当地设置静态调用。我有...
$DB_DataObject = $this->getMock('DB_DataObject', array('factory'));
...但测试仍然显示未知方法“工厂”。我知道它正在创建对象,因为在它说找不到 DB_DataObject 之前。现在可以了。但是,没有办法吗?
我真正想做的是有两个模拟对象,一个也用于返回的表对象。所以,我不仅需要指定 factory 是一个静态调用,还需要它返回一些我已经设置的指定的其他模拟对象。
我应该提醒一下,我不久前在 SimpleTest 中做过这个(找不到代码)并且效果很好。
是什么赋予了?
[更新]
我开始明白它与expects()有关