1

クラス B と対話するクラス A がある場合、テストでクラス B をモックして、クラス A を分離してテストできるようにします。

これは PHPUnit で簡単に実行できます"getMock('classname')"

私の問題は現在次のとおりです。複数class Aのインスタンスを使用している場合、class Bこれをシミュレートできません。"getMock('B')""getMock"class B

次の例:

<?php

class A()
{
    private class_b_1;
    private class_b_2;


    public function setClassB1(B $class_b)
    {
        $this->class_b_1 = $class_b;
    }

    public function setClassB2(B $class_b)
    {
        $this->class_b_2 = $class_b;
    }   
}

そして私のテストでは:

$mock_one_of_class_b = $this -> getMock('B');
$mock_two_of_class_b = $this -> getMock('B');

次に$mock_one_of_class_bと同じオブジェクト$mock_two_of_class_bです。

でクラスの複数のインスタンスをモックするにはどうすればよいPHPUnitですか?

前もって感謝します!

4

1 に答える 1

3

実際には、このgetMockメソッドはモック クラスのさまざまなインスタンスを作成します。この例を見てください:

class Foo
{
    protected $value;

    public function setValue($value)
    {
        $this->value = $value;
    }

    public function getValue()
    {
        return $this->value;
    }
}

次に、そのテストを作成します。

class FooTest extends \PHPUnit_Framework_TestCase 
{
    public function testFoo()
    {
        $a = $this->getMock('Foo', array('someNonExistingMethod'));
        $b = $this->getMock('Foo', array('someNonExistingMethod'));

        $a->setValue(1);
        $b->setValue(234);

        $this->assertEquals(1, $a->getValue(), 'This test will fail if "a" and "b" objects are the same');
    }
}

メソッドの第 2 引数に注意してくださいgetMock。その引数では、phpunitどのメソッドがモックされるかを指定します。引数をまったく渡さない場合はphpunit、オブジェクトからすべてのメソッドをモックしたいと仮定します。したがって、パスした場合array('someNonExistingMethod')、モックされたメソッドはありません (呼び出し時に「実際の」メソッドが呼び出されます)。

于 2013-01-13T11:30:07.137 に答える