Можно ли установить свойства для фиктивного объекта в Simpletest? - PullRequest
4 голосов
/ 23 апреля 2010

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

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

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

$MyObj->propName = 'blah';

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

Я попытался сделать:

 $MockMyObj->propName = 'test Value';

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

Итак, в итоге:

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

Любой совет приветствуется.

1 Ответ

3 голосов
/ 24 апреля 2010

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

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

Пример 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

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

...