Мок-тестирование и волшебный метод PHP __get

У меня возникают проблемы при попытке имитировать объекты методами __get и __set (используя самый простой).

Написание имитационных ответов для __get нехорошо - тесты кажутся слишком тесно связанными с реализацией. Какие-нибудь рекомендации по тестированию, или мне просто полностью избегать магических методов?

Можете ли вы привести пример того, где у вас возникли проблемы? Что касается __get и __set, у них относительно небольшая область использования, которая не добавляет ненужной сложности системе.

gradbot 08.10.2008 19:52

Я использовал систему, подобную той, которую предложил penfold, но установка множества фиктивных возвратов для __get и __set с разными параметрами, казалось, вводила слишком много реализации в тесты

Ken 10.10.2008 19:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
2
3 164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была такая же проблема, и я нашел решение в тестовых примерах SimpleTest:

Из mock_objects_test.php:

class ClassWithSpecialMethods {
    function __get($name) { }
    function __set($name, $value) { }
    function __isset($name) { }
    function __unset($name) { }
    function __call($method, $arguments) { }
    function __toString() { }
}
Mock::generate('ClassWithSpecialMethods');

... отрезать ...

function testReturnFromSpecialAccessor() {
    $mock = new MockClassWithSpecialMethods();
    $mock->setReturnValue('__get', '1st Return', array('first'));
    $mock->setReturnValue('__get', '2nd Return', array('second'));
    $this->assertEqual($mock->first, '1st Return');
    $this->assertEqual($mock->second, '2nd Return');
}

function testcanExpectTheSettingOfValue() {
    $mock = new MockClassWithSpecialMethods();
    $mock->expectOnce('__set', array('a', 'A'));
    $mock->a = 'A';
}

Немного неуклюже, но работает. С другой стороны, я думаю, вам лучше избегать их ... большая корпоративная система, над которой я работаю, активно использует их, и это кошмар - понимать / визуализировать / отлаживать / делать что-либо с ними!

Другие вопросы по теме