Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHPUnit + Mockery - PHP Funktionen mocken?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] PHPUnit + Mockery - PHP Funktionen mocken?

    Hi,

    Ich habe in einer Lib für die ich gerade Tests schreibe eine Methode in der über \filter_has_var( … ) geprüft wird ob ein bestimmter Eintrag im superglobalen $_SERVER Array existiert.

    Damit ich im Test der Klasse aber eine 100%ige Code-Coverage bekomme müste ich auch eben in die Bedingung reinkommen die mit filter_has_var definiert ist.

    Mir ist aber noch keine Möglichkeit begegnet it der ich PHP eigene Funktiionen mocken kann.

    Hat da jemand evtl. eine Idee wie man das angehen könnte?

    Edit:

    Minimiertes Beispiel der Klasse:

    PHP-Code:
    class Foo
    {

       public function 
    doAnyThing()
       {
          if ( \
    filter_has_var( \INPUT_SERVER'Wharever' ) )
          {
             
    // Do some special stuff
          
    }
          
    // Do some stuff
       
    }



  • #2
    Mist, nur noch einmal nach anderen Stichworten suchen und schon hat man die Lösung

    Wenn es jemand interessiert hier die Lösung:
    http://marcelog.github.io/articles/p...h_phpunit.html

    Kommentar


    • #3
      Dazu musst du aber die Backslashes entfernen, sonst funktioniert’s nicht.

      Kommentar


      • #4
        Klar doch! Ist ja logisch.

        Für diejenigen die das evtl. nicht ganz verstehen:

        Die dort geschilderte Methode baut darauf das man nicht \filter_has_var( … ) nutzt sondern immer ohne Namensraum filter_has_var( … )

        Wenn eine gleichnamige Funktion im Namensraum der Library existiert wird diese bevorzugt genutzt und ersetzt die sonst im Root-Namensraum liegende \filter_has_var add hook im Code

        Kommentar


        • #5
          Nach meinem Geschmack ist die Lösung nicht. Ist für eine Klasse ein Unittest vorgesehen, dann sollte beim Schreiben der Klasse schon auf Testbarkeit geachtet werden.
          Dafür sollten externe Abhängigkeiten und globale Funktionen gekapselt werden. Ein Beispiel dafür ist hier PSR-4 Example Implementations .zu finden. Der Aufruf einer globalen Funktion wird einfach in eine eigene Methode gepackt:
          PHP-Code:
          public function register()
          {
             
          spl_autoload_register(array( $this'loadClass' ));

          Kommentar

          Lädt...
          X