Test Driven Development mit php4, 5

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von joedelord, 17.06.2006.

  1. joedelord

    joedelord Thread Starter MacUser Mitglied

    Beiträge:
    481
    Zustimmungen:
    0
    MacUser seit:
    12.12.2002
    Hallo liebe Macuser,

    Auf grund meiner verwendeten Hardware bin ich im Moment noch(!) an 10.2 und damit auch php4 gebunden. Ein neuerliches Projekt steht ins Haus, und diesmal möchte ich es endlich einmal ordentlich angehen. Am liebsten würde ich PHPUnit verwenden wobei ich von Version 1 irgendwie nicht überzeugt bin und bei Version 2 steht mit php5 im Weg.


    Wer hat allgemein Erfahrung und Tips mit TDD und Unit-Tests (zb. PHPUnit) in Verbindung mit php?

    Welche Probleme treten auf, oder auf was sollte man achten wenn man nachträglich zum TDD migrieren will?

    Kann ich die Tests in der finalen Version am Server irgendwie deaktivieren, oder laufen die immer mit?

    Muss auf dem Server auch PHPUnit installiert sein?


    tja, wie man sieht habe ich zur Zeit noch recht wenig Ahnung von der Sache, desshalb bitte ich recht sakrisch (österr. ugs.) um eure Hilfe und Unterstützung.

    lg, joedelord
     
  2. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    MacUser seit:
    31.01.2005
    Warum genau bist Du auf PHP4 beschränkt? Du kannst doch auch PHP5 einsetzen. Das liegt doch normalerweise nicht an der Hardware, welche Version von PHP man einsetzen kann.
     
  3. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.810
    Zustimmungen:
    3.633
    MacUser seit:
    23.11.2004
    wahrscheinlich meinte er, dass es keine pakete mit php5 für 10.2 gibt...
    und er wohl nicht selber kompilieren kann oder will...
     
  4. joedelord

    joedelord Thread Starter MacUser Mitglied

    Beiträge:
    481
    Zustimmungen:
    0
    MacUser seit:
    12.12.2002
    gut erkannt. Als ich vor nun mehr als 3 Jahren mein geliebtes ibook gekauft habe, reichte mein Budget leider nur für das kleinste, und das hat NUR ein CD-Laufwerk und der Tiger wird nur auf DVD ausgeliefert.

    Abgesehen davon; Hat schon mal jemand die Migration von klassischer Entwicklung vom TDD vollzogen? Müssen dann alle Tests nachträglich für den gesamten Code erstellt werden, oder nur für den neuen, und man arbeitet dann parallel?

    recht herzlichen dank, lg,
    joedelord
     
  5. joedelord

    joedelord Thread Starter MacUser Mitglied

    Beiträge:
    481
    Zustimmungen:
    0
    MacUser seit:
    12.12.2002
    push...
     
  6. Marzelpan

    Marzelpan MacUser Mitglied

    Beiträge:
    58
    Zustimmungen:
    0
    MacUser seit:
    31.10.2003
    Hi,

    ich arbeite gerade an einem kleinen Projekt, das ich testdriven in PHP5 mit Unterstützung von PHPUnit2 programmiere. Ich habe dabei allerdings keinen bestehenden Code mit Tests versehen, sondern wirklich konsequent den Zyklus 1. Test schreiben, 2. diesen mit Code möglichst einfach erfüllen, 3. Refactoring, durchgehalten. Dazu kann ich das Buch "Test Driven Development. By Example" von Kent Beck empfehlen.

    Zu Arbeiten an ungetestetem Code: bevor du etwas änderst, schreibe Tests für die wichtigsten Funktionalitäten, die der Code haben soll. So kannst Du sicher sein, dass Du nichts wichtiges zerschießt.

    Zum deaktivieren von Tests auf dem Server: Ich würde empfehlen, ein eigenes Verzeichnis für die UnitTests anzulegen und diese so vom eigentlichen Code zu trennen. Man kann zwar theoretisch seine Tests direkt zum zu testenden Code im gleichen File schreiben, man handelt sich damit aber die Abhängigkeit zum Testframework ein, d. h. PHPUnit muss dann auf dem Server vorhanden sein. Bei interpretierten Sprachen wie PHP kommt noch hinzu, dass der gesamte Testcode bei jedem Aufruf der Seite mitgeparst wird, was wieder etwas Performance kostet.

    Marcel
     
  7. joedelord

    joedelord Thread Starter MacUser Mitglied

    Beiträge:
    481
    Zustimmungen:
    0
    MacUser seit:
    12.12.2002
    Vielen Dank für die Infos. Das hilft mir um einiges weiter.

    Wie hast du die Trennung von Code und Tests umgesetzt. Welche eleganten Lösungen gibt es dafür?

    lg, joedelord
     
  8. Marzelpan

    Marzelpan MacUser Mitglied

    Beiträge:
    58
    Zustimmungen:
    0
    MacUser seit:
    31.10.2003
    Ich habe alle Klassen in einem Verzeichnis "include" abgelegt, alle Test im Verzeichnis "tests". Tests zur Klasse include/Abc.inc.php befinden sich in tests/AbcTest.php, und alle Tests sind in tests/AllTests.php zu einer Testsuite zusammengefasst. In den einzelnen Testklassen binde ich die zu testende Klasse per "require_once" ein und jage meine Tests auf sie :)

    Die Tests rufe ich über ein kleines Makefile auf. Mit "make AbcTest" wird nur der Test AbcTest aufgerufen, mit "make" die komplette Testsuite aus AllTests. "make report" erstellt eine Code-Coverage-Analyse.

    Wenn Du willst kann ich das Makefile posten. Es benutzt allerdings das Shell-Tool von PHPUnit2 für PHP5. Das Verfahren sollte sich aber relativ leicht auf PHPUnit1 übertragen lassen.

    Marcel
     
  9. joedelord

    joedelord Thread Starter MacUser Mitglied

    Beiträge:
    481
    Zustimmungen:
    0
    MacUser seit:
    12.12.2002
    Vielen Dank Marzelpan, über das Makefile würde ich mich natürlich auch freuen.

    lg, joedelord
     
  10. Marzelpan

    Marzelpan MacUser Mitglied

    Beiträge:
    58
    Zustimmungen:
    0
    MacUser seit:
    31.10.2003
    Na denn viel Spaß damit:
    Code:
    PHPUNIT := phpunit
    TESTSDIR := tests
    REPORTDIR := report
    
    INCLUDEDIR := include
    INCLUDES = $(wildcard $(INCLUDEDIR)/*.inc.php)
    
    nakedname = $(basename $(notdir $@))
    testphpsource = $(TESTSDIR)/$@.php
    testsources = $(wildcard $(TESTSDIR)/*Test.php)
    
    tests = $(basename $(notdir $(testsources)))
    
    test:
            -$(PHPUNIT) AllTests $(TESTSDIR)/AllTests.php
    
    report:
            -$(PHPUNIT) --report $(REPORTDIR) AllTests $(TESTSDIR)/AllTests.php
            open -a Safari $(REPORTDIR)/index.htm
    
    $(tests):
            -$(PHPUNIT) $(nakedname) $(testphpsource)
    
    .PHONY: test $(tests) report
    
     
Die Seite wird geladen...

Diese Seite empfehlen