Можно ли установить свойства фиктивного объекта в Simpletest

Обычно я использую методы получения и установки для своих объектов, и я могу тестировать их как фиктивные объекты в SimpleTest, манипулируя ими с помощью кода, например:

Mock::generate('MyObj');
$MockMyObj->setReturnValue('getPropName', 'value')

Однако недавно я начал использовать магические перехватчики (__set() __get()) и получать доступ к таким свойствам:

$MyObj->propName = 'blah';

Но у меня возникают трудности с тем, чтобы фиктивный объект имел доступ к определенному свойству с использованием этой техники.

Итак, есть ли какой-то особый способ установки свойств MockObjects.

Я пробовал делать:

 $MockMyObj->propName = 'test Value';

но это, похоже, не работает. Не уверен, что это мой тестовый объект, Mock, magic Interceptors или SimpleTest, который делает свойство недоступным.

Итак, резюмируя:

Я могу смоделировать методы для моих фиктивных объектов, но у меня возникают проблемы с фиктивными свойствами класса для фиктивных объектов. Можно ли установить свойства фиктивного объекта в Simpletest?

Приветствуются любые советы.


person Community    schedule 23.04.2010    source источник
comment
(Я откатил частичный ответ, так как мы поощряем ответы в поле для ответов, а не в вопросах).   -  person halfer    schedule 03.01.2017


Ответы (1)


В ответ на мой собственный вопрос...

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

Пример SimpleTest, имитирующий перехваченные свойства на имитируемых объектах:

для этого объекта

class MyObj 
   {

   public function __set($name, $value)
    {
    $props[$name] = $value;
    }

   public function __get($name)
    {
    return $props[$name] = $value;
    }

   }

клиент (протестированный класс агрегатора) может получить доступ к таким свойствам

$MyObj->propName = 'blah';
echo $MyObj->propName; //prints blah

и так можно издеваться

Mock::generate('MyObj');
$MockMyObj = new MockMyObj();
$MockMyObj->setReturnValue('__get', 'test property value', array('propName'));

//...later on...
echo $MockMyObj->propName; //prints "test property value"

P.S. Вот еще несколько документов о макетах: http://www.simpletest.org/en/mock_objects_documentation.html

P.P.S

Я действительно пробовал это раньше, но мои эксперименты были скрыты опечаткой в ​​моем коде.

person Community    schedule 23.04.2010
comment
Вам не нужно создавать начальный объект с помощью метода __get. Работает только добавление ->setReturnValue('__get', 1, array('myAttribute')); к фиктивному объекту :) - person Ifnot; 11.10.2013
comment
Спасибо @AnaelFavre. Это интересно слышать. - person JW.; 16.10.2013