2013-06-04 5 views
2

У меня есть абстрактный класс, который имеет абстрактный метод и конкретный метод.Единичный тест Метод абстрактного класса, который вызывает конкретный дочерний метод

Конкретный метод вызывает абстрактный метод и использует его возвращаемое значение.

Как можно высмеять это возвращаемое значение?

Так абстрактный класс

abstract class MyAbstractClass 
{ 
    /** 
    * @return array() 
    */ 
    abstract function tester(); 

    /** 
    * @return array() 
    */ 
    public function myconcrete() 
    { 
     $value = $this->tester(); //Should be an array 

     return array_merge($value, array("a","b","c"); 
    } 
} 

Я хочу проверить метод myconcrete, поэтому я хочу, чтобы дразнить возвращаемое значение тестера - но это называется внутри метода?

Возможно ли это?

ответ

3

Да, это возможно. Ваш тест должен выглядеть следующим образом:

class MyTest extends PHPUnit_Framework_TestCase 
{  
    public function testTester() { 
     // mock only the method tester all other methods will keep unchanged 
     $stub = $this->getMockBuilder('MyAbstractClass') 
      ->setMethods(array('tester')) 
      ->getMock(); 

     // configure the stub so that tester() will return an array 
     $stub->expects($this->any()) 
      ->method('tester') 
      ->will($this->returnValue(array('1', '2', '3'))); 

     // test myconcrete() 
     $result = $stub->myconcrete();  

     // assert result is the correct array 
     $this->assertEquals($result, array(
      '1', '2', '3', 'a', 'b', 'c' 
     )); 
    } 
} 

Обратите внимание, что я использую PHPUnit 3.7.10

Смежные вопросы