Вызов конструктора тестирования насмешек, новое ключевое слово

У меня есть имя класса как строковое свойство. Один метод (fetchObject) создает новый экземпляр этого класса. Я хотел бы протестировать этот метод с помощью PHPUnit и Mockery.

это код

class Maker
{
    private $_className = 'Article';

    public function fetchObject( $array )
    {
        return new $this->_className( $array );
    }
}

Я пробовал что-то вроде этого

$data = array( 'title' => 'Amazing title' );
$article = m::mock( 'Article', array( $data ) );

$maker= new Maker;
$result = $maker->fetchObject( array() );

Тест работает, но я не уверен, проверяет ли он вызов конструктора, и я не знаю, как проверить, был ли передан параметр.


person Kamil Zielinski    schedule 02.07.2013    source источник


Ответы (1)


Обычно вы издеваетесь над классом Maker() и гарантируете, что он возвращает из мока объект, который вы ищете.

Другой вариант, который я сделал для проверки подобных вещей, — это просто протестировать Maker и вызвать подпрограмму fetchObject() с заданным ожиданием класса, а затем проверить с помощью проверки InstanceOf, что возвращаемый объект относится к желаемому классу.

person Steven Scott    schedule 03.07.2013
comment
Спасибо @steven. Я создал простой класс, который установил в $_className, как вы написали во втором решении. Кроме того, его конструктор устанавливает $array как свойство, поэтому я могу проверить, передает ли его Maker. - person Kamil Zielinski; 05.07.2013