2016-02-10 7 views
1

Я тестирую абстрактный класс, который имеет метод, называемый Method.PHPUnit тестовый и абстрактный класс с методом «Метод»

Вот мой абстрактный класс (в сокращенном виде):

abstract class ClassToTest { 

    function Method($_value = NULL) { 
    // based on the value passed in a different value is returned. 
    } 
} 

Вот мой PHPUnit класс:

class ClassToTestTest extends PHPUnit_Framework_TestCase { 
    public $object = NULL; 

    public function setUp() { 
    $this->object = $this->getMockForAbstractClass('ClassToTest'); 
    } 

    public function testMethod() { 

    // passing no value should return NULL 
    $this->assertNull($this->object->Method()); 

    // passing a value should return a value 
    $this->assertEquals($this->object->Method($method), 'return_value'); 
    } 
} 

на основе PHPUnit Documentation я должен быть в состоянии использовать

$stub->expects($this->any())->method('Method')->willReturn('foo'); 

как-то , но я не могу понять, как это сделать.

Как я могу использовать PHPUnit для тестирования метода с именем Method?

Кроме того, у меня нет возможности переименовать метод на что-то еще.

ответ

2

Класс, который вы тестируете, безусловно, является единственным классом, в котором вы не должны насмехаться. Вы бы не тестировали его, если вы подделывали его вызовы метода.

Поскольку ваш класс является абстрактным, вам необходимо проверить его с помощью конкретной реализации. Если у вас его нет, создайте его для теста.

class MyClassToTest extends ClassToTest 
{ 
    // implement abstract methods 
} 
class ClassToTestTest extends PHPUnit_Framework_TestCase 
{ 
    private $object; 

    protected function setUp() 
    { 
     $this->object = new MyClassToTest(); 
    } 

    public function testMethod() 
    { 
     $this->assertSame('return_value', $this->object->Method('foo')); 
    } 

}

+0

Есть набор классов, которые наследуют от этого абстрактного класса, так что я могу проверить это таким образом, но метод объявлен и определен в абстрактном классе, так что делает что тест абстрактного класса должен проверять метод и не полагаться на унаследованный класс для его проверки. –

+0

Используйте одну из реализаций, чтобы протестировать абстрактную. У вас может быть общий класс тестов, который все наследования будут наследовать (поскольку все они будут разделять это поведение). В любом случае, насмешливый класс тестирует НЕ. –

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