私はモックしたいインターフェイスを持っており、そのメソッドの動作を模擬しています。PHPUnitを嘲笑するときのコールバックの参照渡し
私は非常に簡単に行動を模倣するコールバックを作成しました。
このテストは、このインターフェイスに基づいた新しいオブジェクトを作成した場合に渡されますが、インターフェイスをモックしたいと思います。
mocked setUpメソッドが正常に呼び出され、コールバックでgetVar( 'testing')を呼び出すと値が返されます。しかし、私のアサーションは失敗します。なぜなら、その値は利用できないからです。
これはPHPUnitではできないようですね。私がばかげていない限り。
コードフローの簡単な説明。 "getVar"のコードは、追加されたプラグインの "setUp"を呼び出すメソッドを呼び出します。 "setUp"を呼び出すと、 "$ this"を渡します。これは私が参照渡しされることを期待しているもので、実際のオブジェクトで動作するものです。詳細については
class DefaultRendererTest extends \PHPUnit_Framework_TestCase
{
public function testSetGetVar()
{
$theme = $this->getMock('ThemeInterface');
$plugin = $this->getMock('PluginInterface');
$plugin->expects($this->once())
->method('setUp')
->will($this->returnCallback(function($r){
$r->setVar('testing', "fooBar");
}));
$renderer = new DefaultRenderer($theme, null);
$renderer->addPlugin($plugin);
$this->assertEquals('fooBar',$renderer->getVar('testing'));
}
}
ここインターフェースがあり、DefaultRendererはRendererInterface
interface PluginInterface
{
function setUp(RendererInterface $renderer);
}
私にとって完全に正しいと思われます。 $ rと$ rendererが実際に同じオブジェクトへの参照であるかどうかチェックしましたか?しかし、私は彼らがしてはならない理由は見ません。たぶんsetVar()やgetVar()にバグがありますか? – tobyS