7

PHPとPHPUnitでモックオブジェクトを作成しようとしています。これまでのところ、私はこれを持っています:

$object = $this->getMock('object',
                         array('set_properties',
                               'get_events'),
                         array(),
                         'object_test',
                         null);

$object
    ->expects($this->once())
    ->method('get_events')
    ->will($this->returnValue(array()));

$mo = new multiple_object($object);

ひどく曖昧なオブジェクト名を少しの間無視すると、私が行ったことは次のとおりであることがわかります-構成
する2つのメソッドを使用してモックオブジェクトを作成しました
-空白の配列を返すように'get_events'メソッドを構成しました
-モックをにドロップしましたコンストラクター。

私が今やりたいのは2番目の方法を構成することですが、それを行う方法を説明するものが見つかりません。こんなことしたい

$object
    ->expects($this->once())
    ->method('get_events')
    ->will($this->returnValue(array()))
    ->expects($this->once())
    ->method('set_properties')
    ->with($this->equalTo(array()))

またはそのようなものですが、それは機能しません。どうすればいいですか?

正直なところ、これは、テストするために複数のメソッドを構成する必要がある場合、コードの構造が不十分であることを示していますか?

4

1 に答える 1

12

私はPHPUnitの経験がありませんが、私の推測は次のようになります。

$object
  ->expects($this->once())
  ->method('get_events')
  ->will($this->returnValue(array()));
$object
  ->expects($this->once())
  ->method('set_properties')
  ->with($this->equalTo(array()));

もう試しましたか?


編集:

さて、いくつかのコード検索を行うことによって、私はあなたを助けるかもしれないいくつかの例を見つけました

この例を確認してください

彼らはそれを次のように使用します:

public function testMailForUidOrMail()
{
    $ldap = $this->getMock('Horde_Kolab_Server_ldap', array('_getAttributes',
                                                            '_search', '_count',
                                                            '_firstEntry'));
    $ldap->expects($this->any())
        ->method('_getAttributes')
        ->will($this->returnValue(array (
                                      'mail' =>
                                      array (
                                          'count' => 1,
                                          0 => 'wrobel@example.org',
                                      ),
                                      0 => 'mail',
                                      'count' => 1)));
    $ldap->expects($this->any())
        ->method('_search')
        ->will($this->returnValue('cn=Gunnar Wrobel,dc=example,dc=org'));
    $ldap->expects($this->any())
        ->method('_count')
        ->will($this->returnValue(1));
    $ldap->expects($this->any())
        ->method('_firstEntry')
        ->will($this->returnValue(1));
(...)
}

多分あなたの問題はどこかにありますか?

それが役に立ったかどうか教えてください。


Edit2:

これを試すことができますか:

$object = $this->getMock('object', array('set_properties','get_events'));

$object
  ->expects($this->once())
  ->method('get_events')
  ->will($this->returnValue(array()));
$object
  ->expects($this->once())
  ->method('set_properties')
  ->with($this->equalTo(array()));
于 2009-11-13T02:14:51.407 に答える