unit tests für magento - schmengler-se.de · 21.06.2012 unit tests für magento 10/17 db-fixtures...
TRANSCRIPT
![Page 1: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/1.jpg)
Unit Tests für MagentoEine praktische Einführung
Fabian Schmengler8. Magento-Stammtisch Aachen, 21.6.2012
![Page 2: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/2.jpg)
21.06.2012 Unit Tests für Magento 2/17
Vorstellung● Fabian Schmengler● Webentwicklung seit 2005● SGH IT seit 2008
● Gesellschafter, Prokurist, Entwickler● Magento-Modulentwicklung seit 2011● Kontakt
![Page 3: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/3.jpg)
21.06.2012 Unit Tests für Magento 3/17
Unit Tests● Testen einer Programm-Einheit (Klasse)● Vergleich von Ausgabe mit erwarteter Ausgabe● Automatisierbar● Isoliert
● Simulation anderer Klassen („Mock Object“)● Umgebung bei jedem Durchlauf gleich („Fixture“)
– z.B. Test-Datenbank
![Page 4: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/4.jpg)
21.06.2012 Unit Tests für Magento 4/17
PHPUnit● De-facto Standard● xUnit Framework-Familie (JUnit, CppUnit etc.)● Einfache Installation über PEAR Installer
→ http://www.phpunit.de/● IDE Integration (Test per Mausklick)
● Eclipse PTI, Zend Studio, Netbeans, PhpStorm ...
![Page 5: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/5.jpg)
21.06.2012 Unit Tests für Magento 5/17
Begriffe● Fixture: Zustand der Umgebung, Kontext● Test Case: eine Test-Einheit (Klasse)
● Kann mehrere Tests (Methoden) enthalten● Test Suite: Zusammenfassung von Test Cases● Assertion: Vergleich mit erwartetem Wert● Mock: Vom Test kontrolliertes Dummy-Objekt
![Page 6: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/6.jpg)
21.06.2012 Unit Tests für Magento 6/17
Beispiel: Test Case
![Page 7: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/7.jpg)
21.06.2012 Unit Tests für Magento 7/17
EcomDev PHPUnithttp://www.ecomdev.org/
● Extension: Magento PHPUnit Testing● Magento-spezifisches Fixture-Management
● Mage_App● „saubere“ Testdatenbank● Test-Daten für Entities in YAML-Dateien je Test
● Mock Objects● Rückgabe von Mocks in Mage::getModel() etc.
● Gute Dokumentation: http://bit.ly/mR6uKc
![Page 8: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/8.jpg)
21.06.2012 Unit Tests für Magento 8/17
EcomDev PHPUnithttp://www.ecomdev.org/
● Basis-Test Case für● Models, Helpers, Blocks
● Spezielle Test Cases für● Controllers: Testen von Funktion und Layout● Config: Testen der config.xml (!)
● Separation von Tests und Test-Daten● Datenbank-Zustand (fixtures/*.yaml)● Eingabedaten (dataprovider/*.yaml)● Erwartete Daten (expectations/*.yaml)
![Page 9: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/9.jpg)
21.06.2012 Unit Tests für Magento 9/17
Model Test mit Testdaten● Beispiel: ID-Kodierung für Short URLs
![Page 10: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/10.jpg)
21.06.2012 Unit Tests für Magento 10/17
DB-Fixtures● Werden automatisch in Test-DB
übernommen● parent::setUp() nicht vergessen!
● Fixture-Datei innerhalb von Test Case wiederverwendbar
● Typen von Einträgen:● Website, Group, Store (scope)● Entities (eav)● Flat Tables (tables)● Konfiguration (config)
● Unvollständige Daten erlaubt
![Page 11: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/11.jpg)
21.06.2012 Unit Tests für Magento 11/17
Config Test
![Page 12: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/12.jpg)
21.06.2012 Unit Tests für Magento 12/17
Controller Test● Dispatch-Methoden● Zahlreiche Assertions für
● Routing● Layout● Response Headers● Response Body
● Nützlich für Integrationstests● Kein vollständiger Ersatz für funktionale Tests!
Quelle: EcomDev_PHPUnit Manual
![Page 13: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/13.jpg)
21.06.2012 Unit Tests für Magento 13/17
Test-Durchführung● Kommandozeile
path/to/magento$ phpunit --filter Vendor_Module UnitTests.php
● Zend Studio (und andere IDEs analog)
![Page 14: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/14.jpg)
21.06.2012 Unit Tests für Magento 14/17
Unit Tests für JavaScript● Verschiedene konkurrierende Frameworks● In dieser Präsentation:
● JSTestDriver● Qunit
● Testgetriebene Entwicklung in JS● Unterstützt saubereren, modularen Aufbau● Sinnvoll für nicht-trivialen Code
![Page 15: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/15.jpg)
21.06.2012 Unit Tests für Magento 15/17
JSTestDriverhttp://code.google.com/p/js-test-driver/
● xUnit Test Framework● IDE Integration (Eclipse, PhpStorm)● Läuft ohne Browser● Achtung: Inkompatibel mit prototype.js
● Inoffizieller Fix: http://goo.gl/bQXMh
![Page 16: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/16.jpg)
21.06.2012 Unit Tests für Magento 16/17
QUnithttp://docs.jquery.com/Qunit
● Test Framework von (aber nicht nur für) jQuery● Läuft in Browser (HTML-Dokument)
● Fixture und Test Runner zugleich● Aber auch als Plugin für JsTestDriver verfügbar
→ Automatisierung→ Einschränkung: Kein Zugriff auf DOM Fixture
![Page 17: Unit Tests für Magento - schmengler-se.de · 21.06.2012 Unit Tests für Magento 10/17 DB-Fixtures Werden automatisch in Test-DB übernommen parent::setUp() nicht vergessen! Fixture-Datei](https://reader034.vdocuments.site/reader034/viewer/2022052012/6028b5894a554b0e3f66d01d/html5/thumbnails/17.jpg)
21.06.2012 Unit Tests für Magento 17/17
QUnit Test