SlideShare une entreprise Scribd logo
1  sur  101
Test-Driven Development
mit TYPO3




Oliver Klee, 8.-9.4.2011
Unit-
Tests?
Manuelles Testen ist mühsam
Automatisierte
Tests sind
schnell
Unit-Tests für die
Realty-Manager-
   Extension
mehr als
1600 Tests
in weniger als
 60 Sekunden
Sicher sein, dass der
Code das Richtige tut
Verhindern, dass deine
Änderungen etwas anderes
           kaputt machen
Verhindern,
         dass andere Leute
deinen Code kaputtmachen
Auch bei komplexen Projekten
         nichts kaputt machen
Baue ein   Sicherheitsnetz
            fürs Refactoring
Grün fühlt sich   gut
                   an!
Grün fühlt sich   gut
                   an!
Kenne
    deine
Werkzeuge
Die phpunit-Extension
bringt alles Wichtige mit
Die phpunit-Extension
bringt alles Wichtige mit
phpunit (TYPO3-Extension)
Die phpunit-Extension
bringt alles Wichtige mit
phpunit (TYPO3-Extension)
  PHPUnit (PEAR-Paket)
Die phpunit-Extension
bringt alles Wichtige mit
phpunit (TYPO3-Extension)
  PHPUnit (PEAR-Paket)

 Testrunner
 (Back-end-
   Modul)
Die phpunit-Extension
bringt alles Wichtige mit
phpunit (TYPO3-Extension)
  PHPUnit (PEAR-Paket)

 Testrunner      Testrunner
 (Back-end-   (Kommandozeilen-
   Modul)          Modul)
Die phpunit-Extension
bringt alles Wichtige mit
phpunit (TYPO3-Extension)
  PHPUnit (PEAR-Paket)
  Testing-Framework für FE & DB
 Testrunner         Testrunner
 (Back-end-      (Kommandozeilen-
   Modul)             Modul)
Treffen sich
zwei Tests ...
Test   Treffen sich
       zwei Tests ...
Test      Treffen sich
Assertion   zwei Tests ...
Test      Treffen sich
Assertion   zwei Tests ...
  Test
  Test
Test      Treffen sich
Assertion   zwei Tests ...
  Test
  Test
Testcase
Test      Treffen sich
Assertion   zwei Tests ...
  Test
  Test
Testcase
Testcase
Test       Treffen sich
Assertion    zwei Tests ...
  Test
  Test
Testcase
Testcase
 Testsuite
Schreibe   zuerst   den   Test
Schreibe   zuerst   den   Test
Schreibe   zuerst   den   Test
        Test
     schreiben
Schreibe   zuerst   den   Test
        Test
     schreiben
Schreibe   zuerst   den   Test
        Test       Code
     schreiben   schreiben
Schreibe   zuerst   den   Test
        Test       Code
     schreiben   schreiben
Schreibe   zuerst   den   Test
        Test       Code
     schreiben   schreiben
Schreibe   zuerst   den   Test
        Test       Code
     schreiben   schreiben



                             refactoren
Schreibe   zuerst   den   Test
        Test       Code
     schreiben   schreiben



                             refactoren
Es gibt
kleine und große
              Tests
Unit-Tests sind
    klein und schnell
Integrationstests testen
      das große Ganze
Automatisierte Klick-Tests
 testen die Außenansicht
Automatisierte Klick-Tests
 testen die Außenansicht



                  Selenium
Blackbox-Tests
      testen
         das   nach außen Sichtbare
Whitebox-Tests    testen
                  wie genau es
        innen funktioniert
Continuous
Integration
Continuous
Integration
    =
Continuous
Integration
     =
 öfter mal
einchecken
Der Continuous-Integration-Server
               überwacht den Code
     Checkin

                            Repository (SVN)
Der Continuous-Integration-Server
               überwacht den Code
     Checkin




                    k
                -Hoo
                            Repository (SVN)

               SVN
Der Continuous-Integration-Server
                überwacht den Code
     Checkin




                      k
                  -Hoo
                            Repository (SVN)

                 SVN



 Continuous-Integration-
        Server
Der Continuous-Integration-Server
                überwacht den Code
     Checkin




                       k
                   -Hoo
                            Repository (SVN)

                 SVN
       Hey, eine
       Änderung!

 Continuous-Integration-
        Server
Der Continuous-Integration-Server
                überwacht den Code
     Checkin




                       k
                   -Hoo
                                   Repository (SVN)

                 SVN
       Hey, eine
       Änderung!

 Continuous-Integration-     Unit-Tests
        Server             laufen lassen
Der Continuous-Integration-Server
                überwacht den Code
     Checkin




                       k
                   -Hoo
                                   Repository (SVN)

                 SVN
       Hey, eine
       Änderung!

 Continuous-Integration-     Unit-Tests    Bericht
        Server             laufen lassen
Extreme Programming
(XP)
Extreme Programming
(XP)       ständige
          Integration
Extreme Programming
(XP)       ständige kurze
           Integration   Iterationen
Extreme Programming
(XP)       ständige kurze
           Integration    Iterationen

                         Test-Driven
                         Development
Extreme Programming
(XP)       ständige kurze
           Integration    Iterationen

                         Test-Driven
           Refactoring
                         Development
Extreme Programming
(XP)       ständige kurze
               Integration    Iterationen

     Pair                    Test-Driven
               Refactoring
 Programming                 Development
Extreme Programming
(XP)       ständige kurze
                Integration    Iterationen

     Pair                     Test-Driven
                Refactoring
 Programming                  Development

  kollektives
   Eigentum
Extreme Programming
(XP)       ständige kurze
                Integration    Iterationen

     Pair                     Test-Driven
                Refactoring
 Programming                  Development

  kollektives    Coding-
   Eigentum     Standards
Extreme Programming
(XP)       ständige kurze
                Integration    Iterationen

     Pair                     Test-Driven
                Refactoring
 Programming                  Development

  kollektives    Coding-       einfaches
   Eigentum     Standards       Design
Extreme Programming
(XP)       ständige kurze
                Integration    Iterationen

     Pair                     Test-Driven
                Refactoring
 Programming                  Development

  kollektives    Coding-       einfaches
   Eigentum     Standards       Design

                                 keine
                              Überstunden
Extreme Programming
(XP)       ständige kurze
                 Integration     Iterationen

     Pair                       Test-Driven
                 Refactoring
 Programming                    Development

  kollektives      Coding-       einfaches
   Eigentum       Standards       Design

                                   keine
                Planning Game
                                Überstunden
Extreme Programming
(XP)       ständige kurze
                 Integration     Iterationen

     Pair                       Test-Driven
                 Refactoring
 Programming                    Development

  kollektives      Coding-       einfaches
   Eigentum       Standards       Design

   Kunden                          keine
                Planning Game
 einbeziehen                    Überstunden
Das   Testing-Framework
                 ist schnell gebaut
	   /**
	    * @var Tx_Phpunit_Framework
	    */
	   protected $testingFramework;

	   public function setUp() {
	   	 $this->testingFramework = new Tx_Phpunit_Framework('tx_news2');
	   }

	   public function tearDown() {
	   	 $this->testingFramework->cleanUp();
	   	 unset($this->testingFramework);
	   }
Das   Testing-Framework
                 ist schnell gebaut
	   /**
	    * @var Tx_Phpunit_Framework
	    */
	   protected $testingFramework;

	   public function setUp() {
	   	 $this->testingFramework = new Tx_Phpunit_Framework('tx_news2');
	   }
                                                       FE beseitigen,
	   public function tearDown() {
                                                    Datensätze löschen,
	   	 $this->testingFramework->cleanUp();
	   	 unset($this->testingFramework);
                                                     Dateien löschen
	   }
Das   Testing-Framework
                 ist schnell gebaut
	   /**
	    * @var Tx_Phpunit_Framework
	    */
	   protected $testingFramework;

	   public function setUp() {
	   	 $this->testingFramework = new Tx_Phpunit_Framework('tx_news2');
	   }
                                                       FE beseitigen,
	   public function tearDown() {
                                                    Datensätze löschen,
	   	 $this->testingFramework->cleanUp();
	   	 unset($this->testingFramework);
                                                     Dateien löschen
	   }




CREATE TABLE tx_news2_domain_model_news (
	 …
	 is_dummy_record tinyint(1) unsigned DEFAULT '0' NOT NULL,
	 …
Das   Testing-Framework alles faken
                   kann (fast)
Das   Testing-Framework alles faken
                   kann (fast)

        $recordUid = $tf->createRecord($tableName, array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

        $recordUid = $tf->createRecord($tableName, array $recordData = array());


                         $tf->changeRecord($tableName, $uid, array $recordData);
Das   Testing-Framework alles faken
                   kann (fast)

        $recordUid = $tf->createRecord($tableName, array $recordData = array());


                         $tf->changeRecord($tableName, $uid, array $recordData);


                                            $tf->deleteRecord($tableName, $uid);
Das   Testing-Framework alles faken
                   kann (fast)

            $recordUid = $tf->createRecord($tableName, array $recordData = array());


                              $tf->changeRecord($tableName, $uid, array $recordData);


                                                 $tf->deleteRecord($tableName, $uid);


      $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

            $recordUid = $tf->createRecord($tableName, array $recordData = array());


                              $tf->changeRecord($tableName, $uid, array $recordData);


                                                 $tf->deleteRecord($tableName, $uid);


      $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());


      $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

            $recordUid = $tf->createRecord($tableName, array $recordData = array());


                              $tf->changeRecord($tableName, $uid, array $recordData);


                                                 $tf->deleteRecord($tableName, $uid);


      $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());


      $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array());


  $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

            $recordUid = $tf->createRecord($tableName, array $recordData = array());


                              $tf->changeRecord($tableName, $uid, array $recordData);


                                                 $tf->deleteRecord($tableName, $uid);


      $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());


      $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array());


  $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array());


                          $tf->createTemplate($pageId, array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

            $recordUid = $tf->createRecord($tableName, array $recordData = array());


                              $tf->changeRecord($tableName, $uid, array $recordData);


                                                 $tf->deleteRecord($tableName, $uid);


      $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());


      $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array());


  $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array());


                          $tf->createTemplate($pageId, array $recordData = array());


              $groupUid = $tf->createFrontEndUserGroup(array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

            $recordUid = $tf->createRecord($tableName, array $recordData = array());


                              $tf->changeRecord($tableName, $uid, array $recordData);


                                                 $tf->deleteRecord($tableName, $uid);


      $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());


      $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array());


  $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array());


                          $tf->createTemplate($pageId, array $recordData = array());


              $groupUid = $tf->createFrontEndUserGroup(array $recordData = array());


       $userUid = $tf->createFrontEndUser($groups = '', array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

             $recordUid = $tf->createRecord($tableName, array $recordData = array());


                               $tf->changeRecord($tableName, $uid, array $recordData);


                                                  $tf->deleteRecord($tableName, $uid);


      $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());


      $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array());


   $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array());


                           $tf->createTemplate($pageId, array $recordData = array());


               $groupUid = $tf->createFrontEndUserGroup(array $recordData = array());


        $userUid = $tf->createFrontEndUser($groups = '', array $recordData = array());


$userUid = $tf->createAndLoginFrontEndUser($groups = '', array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)
Das   Testing-Framework alles faken
                   kann (fast)

           $recordUid = $tf->createBackEndUser(array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

              $recordUid = $tf->createBackEndUser(array $recordData = array());


         $recordUid = $tf->createBackEndUserGroup(array $recordData = array());
Das   Testing-Framework alles faken
                   kann (fast)

              $recordUid = $tf->createBackEndUser(array $recordData = array());


         $recordUid = $tf->createBackEndUserGroup(array $recordData = array());


         $tf->createRelation($tableName, $uidLocal, $uidForeign, $sorting = 0);
Das   Testing-Framework alles faken
                   kann (fast)

                    $recordUid = $tf->createBackEndUser(array $recordData = array());


               $recordUid = $tf->createBackEndUserGroup(array $recordData = array());


               $tf->createRelation($tableName, $uidLocal, $uidForeign, $sorting = 0);


$tf->createRelationAndUpdateCounter($tableName, $uidLocal, $uidForeign, $columnName);
Das   Testing-Framework alles faken
                   kann (fast)

                    $recordUid = $tf->createBackEndUser(array $recordData = array());


               $recordUid = $tf->createBackEndUserGroup(array $recordData = array());


               $tf->createRelation($tableName, $uidLocal, $uidForeign, $sorting = 0);


$tf->createRelationAndUpdateCounter($tableName, $uidLocal, $uidForeign, $columnName);


                             $tf->removeRelation($tableName, $uidLocal, $uidForeign);
Das   Testing-Framework alles faken
                   kann (fast)
Das   Testing-Framework alles faken
                   kann (fast)

          $path = $tf->createDummyFile($fileName = 'test.txt', $content = '');
Das   Testing-Framework alles faken
                    kann (fast)

                    $path = $tf->createDummyFile($fileName = 'test.txt', $content = '');


$path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array());
Das   Testing-Framework alles faken
                    kann (fast)

                    $path = $tf->createDummyFile($fileName = 'test.txt', $content = '');


$path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array());

                                                        $tf->deleteDummyFile($fileName);
Das   Testing-Framework alles faken
                    kann (fast)

                    $path = $tf->createDummyFile($fileName = 'test.txt', $content = '');


$path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array());

                                                        $tf->deleteDummyFile($fileName);




                                                    $tf->deleteDummyFolder($folderName);
Das   Testing-Framework alles faken
                    kann (fast)

                    $path = $tf->createDummyFile($fileName = 'test.txt', $content = '');


$path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array());

                                                        $tf->deleteDummyFile($fileName);


                                            $path = $tf->createDummyFolder($folderName);

                                                    $tf->deleteDummyFolder($folderName);
Das   Testing-Framework alles faken
                   kann (fast)
Das   Testing-Framework alles faken
                   kann (fast)

                 $pageUid = $tf->createFakeFrontEnd($pageUid = 0);
Das   Testing-Framework alles faken
                   kann (fast)

                 $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                       $tf->discardFakeFrontEnd();
Das   Testing-Framework alles faken
                   kann (fast)

                 $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                       $tf->discardFakeFrontEnd();


                                  $tf->loginFrontEndUser($userId);
Das   Testing-Framework alles faken
                   kann (fast)

                 $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                       $tf->discardFakeFrontEnd();


                                  $tf->loginFrontEndUser($userId);


                                        $tf->logoutFrontEndUser();
Das   Testing-Framework alles faken
                   kann (fast)

                 $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                       $tf->discardFakeFrontEnd();


                                  $tf->loginFrontEndUser($userId);


                                        $tf->logoutFrontEndUser();

                                  $isLoggedIn = $tf->isLoggedIn();
Das   Testing-Framework alles faken
                   kann (fast)

                             $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                                   $tf->discardFakeFrontEnd();


                                              $tf->loginFrontEndUser($userId);


                                                    $tf->logoutFrontEndUser();

                                              $isLoggedIn = $tf->isLoggedIn();


          $numberOfRecords = $tf->countRecords($tableName, $whereClause = '');
Das   Testing-Framework alles faken
                   kann (fast)

                             $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                                   $tf->discardFakeFrontEnd();


                                              $tf->loginFrontEndUser($userId);


                                                    $tf->logoutFrontEndUser();

                                              $isLoggedIn = $tf->isLoggedIn();


          $numberOfRecords = $tf->countRecords($tableName, $whereClause = '');

                  $success = $tf->existsRecord($tableName, $whereClause = '');
Das   Testing-Framework alles faken
                   kann (fast)

                             $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                                   $tf->discardFakeFrontEnd();


                                              $tf->loginFrontEndUser($userId);


                                                    $tf->logoutFrontEndUser();

                                              $isLoggedIn = $tf->isLoggedIn();


          $numberOfRecords = $tf->countRecords($tableName, $whereClause = '');

                  $success = $tf->existsRecord($tableName, $whereClause = '');

                        $success = $tf->existsRecordWithUid($tableName, $uid);
Das   Testing-Framework alles faken
                   kann (fast)

                              $pageUid = $tf->createFakeFrontEnd($pageUid = 0);

                                                    $tf->discardFakeFrontEnd();


                                               $tf->loginFrontEndUser($userId);


                                                     $tf->logoutFrontEndUser();

                                               $isLoggedIn = $tf->isLoggedIn();


           $numberOfRecords = $tf->countRecords($tableName, $whereClause = '');

                   $success = $tf->existsRecord($tableName, $whereClause = '');

                         $success = $tf->existsRecordWithUid($tableName, $uid);


         $success = $tf->existsExactlyOneRecord($tableName, $whereClause = '');

Contenu connexe

Tendances

Testing untestable code - Herbstcampus12
Testing untestable code - Herbstcampus12Testing untestable code - Herbstcampus12
Testing untestable code - Herbstcampus12Stephan Hochdörfer
 
Drohnen und WARP-Antriebe
Drohnen und WARP-AntriebeDrohnen und WARP-Antriebe
Drohnen und WARP-Antriebeberndmueller
 
Testgetriebene Softwareentwicklung
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklungjlink
 
PHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze EinführungPHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze Einführungfrankstaude
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDDRingvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDDCommunity ITmitte.de
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceB1 Systems GmbH
 

Tendances (8)

Testing untestable code - Herbstcampus12
Testing untestable code - Herbstcampus12Testing untestable code - Herbstcampus12
Testing untestable code - Herbstcampus12
 
Drohnen und WARP-Antriebe
Drohnen und WARP-AntriebeDrohnen und WARP-Antriebe
Drohnen und WARP-Antriebe
 
Testgetriebene Softwareentwicklung
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklung
 
PHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze EinführungPHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze Einführung
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
 
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDDRingvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
Ringvorlesung ITmitte.de : Vortrag der FIO SYSTEMS AG über Unit Tests und TDD
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
 

Similaire à Test-driven Development mit TYPO3

Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir seincodepitbull
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTddjlink
 
Agile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous DeliveryAgile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous Deliverypingworks
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsGFU Cyrus AG
 
Agile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenAgile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenpingworks
 
Testing untestable code - gearconf11
Testing untestable code - gearconf11Testing untestable code - gearconf11
Testing untestable code - gearconf11Stephan Hochdörfer
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...DevDay Dresden
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebAndreas Schmidt
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Stephan Hochdörfer
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumBenjamin Schmid
 
Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!gedoplan
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 
Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Toolsgedoplan
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenHendrik Lösch
 
Testen mit, durch und in Scrum
Testen mit, durch und in ScrumTesten mit, durch und in Scrum
Testen mit, durch und in ScrumFrank Düsterbeck
 

Similaire à Test-driven Development mit TYPO3 (20)

Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
AdvancedTdd
AdvancedTddAdvancedTdd
AdvancedTdd
 
Agile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous DeliveryAgile Bodensee - Introducing Continuous Delivery
Agile Bodensee - Introducing Continuous Delivery
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Agile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more oftenAgile Breakfast - If it hurts do it more often
Agile Breakfast - If it hurts do it more often
 
Testing untestable code - gearconf11
Testing untestable code - gearconf11Testing untestable code - gearconf11
Testing untestable code - gearconf11
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11Testing untestable code - PHPUGFFM 01/11
Testing untestable code - PHPUGFFM 01/11
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit Selenium
 
Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!
 
Testing untestable code - DCHH
Testing untestable code - DCHHTesting untestable code - DCHH
Testing untestable code - DCHH
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
Softwarequalitätssicherung mit Continuous Integration Tools
 Softwarequalitätssicherung mit Continuous Integration Tools Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
Testen mit, durch und in Scrum
Testen mit, durch und in ScrumTesten mit, durch und in Scrum
Testen mit, durch und in Scrum
 

Plus de Oliver Klee

Stand das im Handbuch?
Stand das im Handbuch?Stand das im Handbuch?
Stand das im Handbuch?Oliver Klee
 
Test-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DETest-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DEOliver Klee
 
Objektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluidObjektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluidOliver Klee
 
Test-driven Development for TYPO3
Test-driven Development for TYPO3Test-driven Development for TYPO3
Test-driven Development for TYPO3Oliver Klee
 
Stand das im Handbuch?
Stand das im Handbuch?Stand das im Handbuch?
Stand das im Handbuch?Oliver Klee
 
Test-Driven Development for TYPO3
Test-Driven Development for TYPO3Test-Driven Development for TYPO3
Test-Driven Development for TYPO3Oliver Klee
 
Test-driven development for TYPO3 (T3DD11)
Test-driven development for TYPO3 (T3DD11)Test-driven development for TYPO3 (T3DD11)
Test-driven development for TYPO3 (T3DD11)Oliver Klee
 
Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)Oliver Klee
 
Persönliches Zeitmanagement mit Getting Things Done (GTD)
Persönliches Zeitmanagement mit Getting Things Done (GTD)Persönliches Zeitmanagement mit Getting Things Done (GTD)
Persönliches Zeitmanagement mit Getting Things Done (GTD)Oliver Klee
 
Everything you need to know about the TYPO3 Security Team (T3DD10)
Everything you need to know about the TYPO3 Security Team (T3DD10)Everything you need to know about the TYPO3 Security Team (T3DD10)
Everything you need to know about the TYPO3 Security Team (T3DD10)Oliver Klee
 
TDD & Best Practices mit TYPO3
TDD & Best Practices mit TYPO3TDD & Best Practices mit TYPO3
TDD & Best Practices mit TYPO3Oliver Klee
 
Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)Oliver Klee
 
Unit testing for the TYPO3 4.x core
Unit testing for the TYPO3 4.x coreUnit testing for the TYPO3 4.x core
Unit testing for the TYPO3 4.x coreOliver Klee
 

Plus de Oliver Klee (14)

Stand das im Handbuch?
Stand das im Handbuch?Stand das im Handbuch?
Stand das im Handbuch?
 
Test-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DETest-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DE
 
Objektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluidObjektorientierte Programmierung mit extbase und fluid
Objektorientierte Programmierung mit extbase und fluid
 
Test-driven Development for TYPO3
Test-driven Development for TYPO3Test-driven Development for TYPO3
Test-driven Development for TYPO3
 
Stand das im Handbuch?
Stand das im Handbuch?Stand das im Handbuch?
Stand das im Handbuch?
 
Test-Driven Development for TYPO3
Test-Driven Development for TYPO3Test-Driven Development for TYPO3
Test-Driven Development for TYPO3
 
Test-driven development for TYPO3 (T3DD11)
Test-driven development for TYPO3 (T3DD11)Test-driven development for TYPO3 (T3DD11)
Test-driven development for TYPO3 (T3DD11)
 
Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)Test-driven development with TYPO3 (T3CON10)
Test-driven development with TYPO3 (T3CON10)
 
Persönliches Zeitmanagement mit Getting Things Done (GTD)
Persönliches Zeitmanagement mit Getting Things Done (GTD)Persönliches Zeitmanagement mit Getting Things Done (GTD)
Persönliches Zeitmanagement mit Getting Things Done (GTD)
 
Everything you need to know about the TYPO3 Security Team (T3DD10)
Everything you need to know about the TYPO3 Security Team (T3DD10)Everything you need to know about the TYPO3 Security Team (T3DD10)
Everything you need to know about the TYPO3 Security Team (T3DD10)
 
TDD & Best Practices mit TYPO3
TDD & Best Practices mit TYPO3TDD & Best Practices mit TYPO3
TDD & Best Practices mit TYPO3
 
Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)Unit testing for the TYPO3 4.x core (T3DD10)
Unit testing for the TYPO3 4.x core (T3DD10)
 
GPG Workshop
GPG WorkshopGPG Workshop
GPG Workshop
 
Unit testing for the TYPO3 4.x core
Unit testing for the TYPO3 4.x coreUnit testing for the TYPO3 4.x core
Unit testing for the TYPO3 4.x core
 

Test-driven Development mit TYPO3

  • 7. in weniger als 60 Sekunden
  • 8. Sicher sein, dass der Code das Richtige tut
  • 9. Verhindern, dass deine Änderungen etwas anderes kaputt machen
  • 10. Verhindern, dass andere Leute deinen Code kaputtmachen
  • 11. Auch bei komplexen Projekten nichts kaputt machen
  • 12. Baue ein Sicherheitsnetz fürs Refactoring
  • 13. Grün fühlt sich gut an!
  • 14. Grün fühlt sich gut an!
  • 15. Kenne deine Werkzeuge
  • 17. Die phpunit-Extension bringt alles Wichtige mit phpunit (TYPO3-Extension)
  • 18. Die phpunit-Extension bringt alles Wichtige mit phpunit (TYPO3-Extension) PHPUnit (PEAR-Paket)
  • 19. Die phpunit-Extension bringt alles Wichtige mit phpunit (TYPO3-Extension) PHPUnit (PEAR-Paket) Testrunner (Back-end- Modul)
  • 20. Die phpunit-Extension bringt alles Wichtige mit phpunit (TYPO3-Extension) PHPUnit (PEAR-Paket) Testrunner Testrunner (Back-end- (Kommandozeilen- Modul) Modul)
  • 21. Die phpunit-Extension bringt alles Wichtige mit phpunit (TYPO3-Extension) PHPUnit (PEAR-Paket) Testing-Framework für FE & DB Testrunner Testrunner (Back-end- (Kommandozeilen- Modul) Modul)
  • 23. Test Treffen sich zwei Tests ...
  • 24. Test Treffen sich Assertion zwei Tests ...
  • 25. Test Treffen sich Assertion zwei Tests ... Test Test
  • 26. Test Treffen sich Assertion zwei Tests ... Test Test Testcase
  • 27. Test Treffen sich Assertion zwei Tests ... Test Test Testcase Testcase
  • 28. Test Treffen sich Assertion zwei Tests ... Test Test Testcase Testcase Testsuite
  • 29. Schreibe zuerst den Test
  • 30. Schreibe zuerst den Test
  • 31. Schreibe zuerst den Test Test schreiben
  • 32. Schreibe zuerst den Test Test schreiben
  • 33. Schreibe zuerst den Test Test Code schreiben schreiben
  • 34. Schreibe zuerst den Test Test Code schreiben schreiben
  • 35. Schreibe zuerst den Test Test Code schreiben schreiben
  • 36. Schreibe zuerst den Test Test Code schreiben schreiben refactoren
  • 37. Schreibe zuerst den Test Test Code schreiben schreiben refactoren
  • 38. Es gibt kleine und große Tests
  • 39. Unit-Tests sind klein und schnell
  • 40. Integrationstests testen das große Ganze
  • 42. Automatisierte Klick-Tests testen die Außenansicht Selenium
  • 43. Blackbox-Tests testen das nach außen Sichtbare
  • 44. Whitebox-Tests testen wie genau es innen funktioniert
  • 47. Continuous Integration = öfter mal einchecken
  • 48. Der Continuous-Integration-Server überwacht den Code Checkin Repository (SVN)
  • 49. Der Continuous-Integration-Server überwacht den Code Checkin k -Hoo Repository (SVN) SVN
  • 50. Der Continuous-Integration-Server überwacht den Code Checkin k -Hoo Repository (SVN) SVN Continuous-Integration- Server
  • 51. Der Continuous-Integration-Server überwacht den Code Checkin k -Hoo Repository (SVN) SVN Hey, eine Änderung! Continuous-Integration- Server
  • 52. Der Continuous-Integration-Server überwacht den Code Checkin k -Hoo Repository (SVN) SVN Hey, eine Änderung! Continuous-Integration- Unit-Tests Server laufen lassen
  • 53. Der Continuous-Integration-Server überwacht den Code Checkin k -Hoo Repository (SVN) SVN Hey, eine Änderung! Continuous-Integration- Unit-Tests Bericht Server laufen lassen
  • 55. Extreme Programming (XP) ständige Integration
  • 56. Extreme Programming (XP) ständige kurze Integration Iterationen
  • 57. Extreme Programming (XP) ständige kurze Integration Iterationen Test-Driven Development
  • 58. Extreme Programming (XP) ständige kurze Integration Iterationen Test-Driven Refactoring Development
  • 59. Extreme Programming (XP) ständige kurze Integration Iterationen Pair Test-Driven Refactoring Programming Development
  • 60. Extreme Programming (XP) ständige kurze Integration Iterationen Pair Test-Driven Refactoring Programming Development kollektives Eigentum
  • 61. Extreme Programming (XP) ständige kurze Integration Iterationen Pair Test-Driven Refactoring Programming Development kollektives Coding- Eigentum Standards
  • 62. Extreme Programming (XP) ständige kurze Integration Iterationen Pair Test-Driven Refactoring Programming Development kollektives Coding- einfaches Eigentum Standards Design
  • 63. Extreme Programming (XP) ständige kurze Integration Iterationen Pair Test-Driven Refactoring Programming Development kollektives Coding- einfaches Eigentum Standards Design keine Überstunden
  • 64. Extreme Programming (XP) ständige kurze Integration Iterationen Pair Test-Driven Refactoring Programming Development kollektives Coding- einfaches Eigentum Standards Design keine Planning Game Überstunden
  • 65. Extreme Programming (XP) ständige kurze Integration Iterationen Pair Test-Driven Refactoring Programming Development kollektives Coding- einfaches Eigentum Standards Design Kunden keine Planning Game einbeziehen Überstunden
  • 66. Das Testing-Framework ist schnell gebaut /** * @var Tx_Phpunit_Framework */ protected $testingFramework; public function setUp() { $this->testingFramework = new Tx_Phpunit_Framework('tx_news2'); } public function tearDown() { $this->testingFramework->cleanUp(); unset($this->testingFramework); }
  • 67. Das Testing-Framework ist schnell gebaut /** * @var Tx_Phpunit_Framework */ protected $testingFramework; public function setUp() { $this->testingFramework = new Tx_Phpunit_Framework('tx_news2'); } FE beseitigen, public function tearDown() { Datensätze löschen, $this->testingFramework->cleanUp(); unset($this->testingFramework); Dateien löschen }
  • 68. Das Testing-Framework ist schnell gebaut /** * @var Tx_Phpunit_Framework */ protected $testingFramework; public function setUp() { $this->testingFramework = new Tx_Phpunit_Framework('tx_news2'); } FE beseitigen, public function tearDown() { Datensätze löschen, $this->testingFramework->cleanUp(); unset($this->testingFramework); Dateien löschen } CREATE TABLE tx_news2_domain_model_news ( … is_dummy_record tinyint(1) unsigned DEFAULT '0' NOT NULL, …
  • 69. Das Testing-Framework alles faken kann (fast)
  • 70. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array());
  • 71. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData);
  • 72. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid);
  • 73. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid); $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array());
  • 74. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid); $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array()); $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array());
  • 75. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid); $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array()); $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array()); $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array());
  • 76. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid); $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array()); $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array()); $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array()); $tf->createTemplate($pageId, array $recordData = array());
  • 77. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid); $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array()); $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array()); $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array()); $tf->createTemplate($pageId, array $recordData = array()); $groupUid = $tf->createFrontEndUserGroup(array $recordData = array());
  • 78. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid); $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array()); $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array()); $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array()); $tf->createTemplate($pageId, array $recordData = array()); $groupUid = $tf->createFrontEndUserGroup(array $recordData = array()); $userUid = $tf->createFrontEndUser($groups = '', array $recordData = array());
  • 79. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createRecord($tableName, array $recordData = array()); $tf->changeRecord($tableName, $uid, array $recordData); $tf->deleteRecord($tableName, $uid); $pageUid = $tf->createFrontEndPage($parentId = 0, array $recordData = array()); $pageUid = $tf->createSystemFolder($parentId = 0, array $recordData = array()); $elementUid = $tf->createContentElement($pageId = 0, array $recordData = array()); $tf->createTemplate($pageId, array $recordData = array()); $groupUid = $tf->createFrontEndUserGroup(array $recordData = array()); $userUid = $tf->createFrontEndUser($groups = '', array $recordData = array()); $userUid = $tf->createAndLoginFrontEndUser($groups = '', array $recordData = array());
  • 80. Das Testing-Framework alles faken kann (fast)
  • 81. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createBackEndUser(array $recordData = array());
  • 82. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createBackEndUser(array $recordData = array()); $recordUid = $tf->createBackEndUserGroup(array $recordData = array());
  • 83. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createBackEndUser(array $recordData = array()); $recordUid = $tf->createBackEndUserGroup(array $recordData = array()); $tf->createRelation($tableName, $uidLocal, $uidForeign, $sorting = 0);
  • 84. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createBackEndUser(array $recordData = array()); $recordUid = $tf->createBackEndUserGroup(array $recordData = array()); $tf->createRelation($tableName, $uidLocal, $uidForeign, $sorting = 0); $tf->createRelationAndUpdateCounter($tableName, $uidLocal, $uidForeign, $columnName);
  • 85. Das Testing-Framework alles faken kann (fast) $recordUid = $tf->createBackEndUser(array $recordData = array()); $recordUid = $tf->createBackEndUserGroup(array $recordData = array()); $tf->createRelation($tableName, $uidLocal, $uidForeign, $sorting = 0); $tf->createRelationAndUpdateCounter($tableName, $uidLocal, $uidForeign, $columnName); $tf->removeRelation($tableName, $uidLocal, $uidForeign);
  • 86. Das Testing-Framework alles faken kann (fast)
  • 87. Das Testing-Framework alles faken kann (fast) $path = $tf->createDummyFile($fileName = 'test.txt', $content = '');
  • 88. Das Testing-Framework alles faken kann (fast) $path = $tf->createDummyFile($fileName = 'test.txt', $content = ''); $path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array());
  • 89. Das Testing-Framework alles faken kann (fast) $path = $tf->createDummyFile($fileName = 'test.txt', $content = ''); $path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array()); $tf->deleteDummyFile($fileName);
  • 90. Das Testing-Framework alles faken kann (fast) $path = $tf->createDummyFile($fileName = 'test.txt', $content = ''); $path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array()); $tf->deleteDummyFile($fileName); $tf->deleteDummyFolder($folderName);
  • 91. Das Testing-Framework alles faken kann (fast) $path = $tf->createDummyFile($fileName = 'test.txt', $content = ''); $path = $tf->createDummyZipArchive($fileName = 'test.zip', array $filesToAdd = array()); $tf->deleteDummyFile($fileName); $path = $tf->createDummyFolder($folderName); $tf->deleteDummyFolder($folderName);
  • 92. Das Testing-Framework alles faken kann (fast)
  • 93. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0);
  • 94. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd();
  • 95. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd(); $tf->loginFrontEndUser($userId);
  • 96. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd(); $tf->loginFrontEndUser($userId); $tf->logoutFrontEndUser();
  • 97. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd(); $tf->loginFrontEndUser($userId); $tf->logoutFrontEndUser(); $isLoggedIn = $tf->isLoggedIn();
  • 98. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd(); $tf->loginFrontEndUser($userId); $tf->logoutFrontEndUser(); $isLoggedIn = $tf->isLoggedIn(); $numberOfRecords = $tf->countRecords($tableName, $whereClause = '');
  • 99. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd(); $tf->loginFrontEndUser($userId); $tf->logoutFrontEndUser(); $isLoggedIn = $tf->isLoggedIn(); $numberOfRecords = $tf->countRecords($tableName, $whereClause = ''); $success = $tf->existsRecord($tableName, $whereClause = '');
  • 100. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd(); $tf->loginFrontEndUser($userId); $tf->logoutFrontEndUser(); $isLoggedIn = $tf->isLoggedIn(); $numberOfRecords = $tf->countRecords($tableName, $whereClause = ''); $success = $tf->existsRecord($tableName, $whereClause = ''); $success = $tf->existsRecordWithUid($tableName, $uid);
  • 101. Das Testing-Framework alles faken kann (fast) $pageUid = $tf->createFakeFrontEnd($pageUid = 0); $tf->discardFakeFrontEnd(); $tf->loginFrontEndUser($userId); $tf->logoutFrontEndUser(); $isLoggedIn = $tf->isLoggedIn(); $numberOfRecords = $tf->countRecords($tableName, $whereClause = ''); $success = $tf->existsRecord($tableName, $whereClause = ''); $success = $tf->existsRecordWithUid($tableName, $uid); $success = $tf->existsExactlyOneRecord($tableName, $whereClause = '');

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n