2016-04-18 5 views
0

Вот моя функция ждет тестом PHPUnit в:Как заменить PHP-класс на PHPUnit-заглушку?

<?php 
class Dog 
{ 
    public function born() 
    { 
     $a = new Action(); 
     $rs = $a->talk(); 
     return $rs; 
    } 
} 

А класс Действие:

class Action 
{ 
    public function talk() 
    { 
     return "true"; 
    } 
} 

Функция теста:

public function testStub() 
{ 
    $stub = $this->getMockBuilder('Action') 
     ->getMock(); 
    $stub->method('talk') 
     ->willReturn('false'); 
    var_dump($stub->talk()); // "false" 

    $dog = new Dog(); 

    //[How can the born method invoke the stub method ?] 
    var_dump($dog->born()); // "true" [I think it should be "false",but it isn't] 
} 

Теперь, как я могу использовать класс заглушки для замены класса Action?

Благодарим за помощь.

+0

Возможный дубликат [Php, как обмануть создание объекта?] (Http://stackoverflow.com/questions/31495360/php-how-to-mock-object-instantiation) –

ответ

1

Способ, которым в настоящий момент написан ваш код, нельзя заменить Action тестовым двойным. Код необходимо реорганизовать так, чтобы вы могли вставлять Action экземпляров. Затем вы можете использовать тестовый двойной вместо реального экземпляра Action.

+0

Полезно! Большое спасибо. – zcmyworld