Quantcast
Channel: Agentur münster-webdesign.net » Test-Driven Development
Viewing all articles
Browse latest Browse all 7

Magento: Erweiterung für EcomDev PHPUnit zum Testen geschützter (protected) Methoden und Eigenschaften

$
0
0

Manchmal ist es ein echtes Hindernis bei der testgetriebenen Entwicklung, wenn sich geschützte (protected) Methoden und Eigenschaften nur indirekt oder mit Hilfs-Konstrukten basierend auf der Reflection-Klasse testen lassen. Denn weder das PHPUnit-Framework noch dessen populäre Implementierung für Magento (EcomDev PHPUnit) bieten für diesen Fall bislang eine bequeme Lösung.

Daher haben wir vor einiger Zeit mit Mswebdesign PHPUnit eine Erweiterung für EcomDev PHPUnit geschrieben und auf GitHub veröffentlicht, die genau dies ermöglicht: Das komfortable Testen geschützter Methoden und Eingenschaften. Dabei berücksichtigt unser Modul auch Magento-spezifische Besonderheiten und unterstützt beispielsweise beim Erzeugen von “accessible” Model-Mocks.

Aber der Reihe nach. Zunächst führt Mswebdesign PHPUnit zwei neue Klassen ein, Mswebdesign_PHPUnit_Test_Case und Mswebdesign_PHPUnit_Test_Case_Controller. Diese dienen als Grundlage eigener Testklassen und können analog zu den Klassen EcomDev_PHPUnit_Test_Case und EcomDev_PHPUnit_Test_Case_Controller aus der EcomDev PHPUnit-Erweiterung eingesetzt werden, von denen sie unmittelbar erben.

Erbt eine Testklassen nun von einer der o.g. beiden neuen Klassen, stehen anschließend diverse neue Methoden bereit, mit denen sich Mock-Objekte erzeugen lassen, deren Methoden und Eigenschaften trotzt “protected”-Auszeichnung zugänglich sind:

- getAccessibleModelMock($classAlias, $methods = array(), array $constructorArguments = array(), $mockClassAlias = ”, $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true)
- getAccessibleModelMockBuilder($classAlias)
- getAccessibleMockBuilder($className)
- getAccessibleResourceModelMockBuilder($classAlias)
- getAccessibleBlockMockBuilder($classAlias)
- getAccessibleResourceModelMock($classAlias, $methods = array(),         array $constructorArguments = array(),         $mockClassAlias = ”, $callOriginalConstructor = true,         $callOriginalClone = true, $callAutoload = true)

Die so erzeugten Mock-Objekte bieten dann die folgenden Methoden, um geschützte Methoden des Mock-Objekts aufzurufen respektive dessen geschützte Eigenschaften lesen und setzen zu können:

// den Wert einer geschützten Eigenschaft setzten
_set($protectedPropertyName, $value)

// den Wert einer geschützten Eigenschaft auslesen
_get($protectedPropertyName)

// den Wert einer geschützten Eigenschaft als Referenz setzen (&$value)
_setRef($protectedPropertyName, $value)

// eine geschützte Methode aufrufen
_call($protectedMethodName, Argument1, Argument2 [...])


Viewing all articles
Browse latest Browse all 7

Latest Images

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Vimeo 10.6.2 by Vimeo.com, Inc.

Vimeo 10.6.2 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.





Latest Images

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Vimeo 10.6.1 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.