【发布时间】:2015-02-03 12:13:09
【问题描述】:
我有一个状态对象,它扩展了实现 SplSubject 的基本抽象类。
然后,此状态将传递给观察者的通知方法 - 我的单元测试和 IDE 抱怨所涉及的类型。
abstract class TQ_Type implements \SplObserver
{
public function update(TQ_State $tq_state)
{
...
}
}
abstract class TQ_State implements \SplSubject
{
public function __construct()
{
$this->observers = new SplObjectStorage;
}
public function attach(TQ_Type $observer)
{
$this->observers->attach($observer);
}
public function detach(TQ_Type $observer)
{
$this->observers->detach($observer);
}
public function notify()
{
foreach ($this->observers as $observer)
{
$observer->update($this);
}
}
}
以下测试产生:PHP 致命错误:TQ_State::attach() 声明必须与 SplSubject::attach(SplObserver $SplObserver) 兼容
class TQTypeStandardAppealTest extends PHGUnit_Internal
{
private $under_test;
public function setUp()
{
$this->under_test = new TQ_Type_StandardAppeal();
}
public function test_pending_standard_appeal_tq_approval_hits_states_notify_method()
{
$state = Mockery::mock('TQ_State_Pending')->makePartial();
$state->shouldReceive('get_event')
->withNoArgs()
->andReturn('Approve');
$this->under_test->update($state);
}
}
我从这些派生,这些派生类是单元测试的主题...
这是一个模拟不尊重它所模拟的对象的层次结构的问题
注意,我在这里使用了部分模拟,因为实际模拟返回一个 Mockery\CompositeExpectation,但我稍后会处理。
【问题讨论】:
标签: php unit-testing observer-pattern mockery