Как заставить PHPUnit заменить класс в моем тестовом методе?

У меня есть класс, который я хочу протестировать. Вот код:

class MyClass
{
    function functionToTest() {

        $class = new Example();

}

Могу ли я в PHPUnit использовать макеты/заглушки для замены класса Example?

В моем тестовом методе:

class MyClassTest extends PHPUnit_Framework_TestCase {

    function testFunctionTest() {
        $testClass = new MyClass();
        $result = $testClass->functionTest();

    }

}

Итак, вместо того, чтобы использовать фактический класс «Пример», может ли PHPUnit вмешаться и использовать макет для представления «нового примера ()»?


person james    schedule 11.01.2011    source источник


Ответы (1)


Лучшим решением было бы внедрить экземпляр Example в метод functionToTest():

function functionToTest( Example $class )

Затем вы сможете издеваться над ним в своих модульных тестах:

function testFunctionTest() {
    $testClass = new MyClass();
    $class = $this->getMock( 'Example' );
    $result = $testClass->functionTest( $class );

}

Но если этот подход по какой-то причине вам не подходит, попробуйте использовать функцию set_new_overload(), предоставляемую расширениями test_helpers. Дополнительную информацию см. в блоге Себастьяна Бергманна.

person Vika    schedule 11.01.2011