Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Tests mit externen Quellen/Zugriffen

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.04.2005
    Beiträge
    52

    Tests mit externen Quellen/Zugriffen

    hi,
    folgende Situation:
    ich soll eine Test-Methode (PHPUnit) für eine Methode schreiben,
    die unter anderem auf "mail(...);" zugreift.

    Wie kann ich nun innerhalb des Tests prüfen ob die Mail verschickt wurde?

    Ich suche eine elegante Lösung,
    also ich könnte natürlich auch in die Methode gehen und das mail() ersetzen,
    aber das schreiben von Test's sollte doch keine Auswirkungen auf die
    eigentlichen Systeme haben, oder?

    Gibt es vielleicht eine Möglichkeit dem parser zu sagen statt dem
    eigentlichen mail() eine andere, selbst definierte, funktion aufzurufen?

    Oder das senden von mails mitzuverfolgen?
    (was allerdings auch wieder recht dirty wäre,
    da dann wieder externe Systeme im Spiel wären)

    Normalerweise würde man für Test-Methoden einfach interfaces bzw. API's
    simulieren, aber das ist hier ja nicht möglich, da "mail()" eben fest in PHP
    eingebaut ist.

    Wie würdet ihr solch eine Situation (möglichst elegant) angehen?

    (Falls es für mail() eine Ausnahme-Lösung gibt, gilt die gleiche
    Fragestellung auch für z.b.: Datenbankabstraktion wo mysql_query() benutzt
    wird oder Kommunikation über Soap oder sonstige fest verschweisste
    Funktionen die mit externen Quellen kommunizieren müssen.)


    Danke für jede hilfreiche Antwort.

  2. #2
    Registrierter Benutzer
    Registriert seit
    18.04.2008
    Beiträge
    59
    Zitat Zitat von GU4RDI4N Beitrag anzeigen
    Oder das senden von mails mitzuverfolgen?
    .
    Ja, etwas dirty, da es leider ein konfiguriertes php mail voraussetzt.
    Spricht etwas gegen die Auswertung oder Einbindung des bool Rückgabewertes von mail (oder auch der Query) ?

    Ich habe zusätzlich die mail Funktion in einer eigenen send-Methode. Da z.B. "assertEquals ( Dateiname zu mimetype )" nichts mit dem versenden vom Mail zu tun hat.

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.04.2005
    Beiträge
    52
    ich hab für so etwas jetzt erstmal einen (leider ziemlich unsauberen) wörkaraund indem ich mir so eine Art Faker-Klasse gebaut habe die eine gegebene Klasse kopiert und bestimmte Funktionsaufrufe ersetzt.
    ("do_it();" wird zu "get_mock()->do_it();" usw...)

    Dann kann ich mit der magischen Methode "__call($name, $args)" mitverfolgen was diese Klasse so treibt, das Funktioniert auch (bisher) ziemlich gut.

    Realisiert indem ich mittels Reflektion den Quellcode der Klasse nehme, in tokens parse, die aufrufe umschreibe und unter neuem name evaluiere und instanziiere.

    Auch eine Variablen-Verfolgung funktioniert ganz gut.

    Aber ist so etwas eine gute Lösung?
    Erscheint mir aber trotzdem recht dirty...

    Aber gibt es denn noch andere Lösungswege die Aufrufe mitzuverfolgen ohne die Klasse manuell umzuschreiben?

  4. #4
    Registrierter Benutzer
    Registriert seit
    18.04.2008
    Beiträge
    59
    Zitat Zitat von GU4RDI4N Beitrag anzeigen
    Aber ist so etwas eine gute Lösung?
    Ja, Stubs (Objektreplikate die einen erwartenden Wert zurückgeben) sind eine Lösung für externe Resourcen.

    http://www.phpunit.de/manual/3.0/en/...-objects.stubs

    Im phpunit 3.4 manual findet man auch ein WebService Beipiel:

    http://www.phpunit.de/manual/3.4/en/...g-web-services

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •