4 Stimmen

Mock-Tests und die magische __get-Methode von PHP

Ich habe Probleme, wenn ich versuche, Objekte zu spiegeln mit __get y __set Methoden (mit simpletest ).

Schreiben von Scheinantworten für __get riecht nicht gut - die Tests scheinen zu eng an die Umsetzung gebunden zu sein. Irgendwelche Empfehlungen für die Prüfung, oder sollte ich einfach vermeiden, die magische Methoden vollständig?

3voto

Ich hatte das gleiche Problem und fand die Lösung in den SimpleTest-Testfällen:

Aus 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';
}

Ein bisschen klobig, aber es funktioniert. Andererseits denke ich, dass es besser ist, sie zu vermeiden... das große Unternehmenssystem, an dem ich arbeite, verwendet sie stark und es ist ein Alptraum zu verstehen/visualisieren/debuggen/etwas damit zu tun!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X