J'ai eu le même problème et a trouvé la solution dans les cas de test SimpleTest:
De 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');
... snip ...
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';
}
A peu maladroit, mais ça marche. D'un autre côté, je pense que vous feriez mieux de les éviter ... le grand système d'entreprise sur lequel je travaille les utilise énormément et c'est un cauchemar de comprendre/visualiser/déboguer/faire n'importe quoi!
Pouvez-vous donner un exemple d'où vous rencontrez des problèmes? En ce qui concerne __get et __set, ils ont un domaine d'utilisation relativement petit qui n'ajoute pas de complexité inutile à un système. – gradbot
J'utilisais un système comme celui proposé par penfold - mais mettre beaucoup de retours fictifs pour __get et __set avec des paramètres différents semblait mettre trop d'implémentation dans les tests – Ken