Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Browserkomponente testen

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.05.2014
    Beiträge
    6

    Browserkomponente testen

    Ich habe eine Browserkomponente, die als 'After-Hook' konzipiert ist (d.h. die sie wird um die eigentliche Methode herum ausgefuehrt):

    PHP-Code:
        /**
         * Call a remote URL in execute after.
         */
    class BrowseHook implements MethodHook {
        private 
    $user_id;
        private 
    $url;
        private 
    $params;
        private 
    $expectedResponse;
        private 
    $match false;
        
    /**
         */
        
    public function __construct($user_id,$url,$params,$expected_response$match false) {
            
    $this->user_id $user_id;
            
    $this->url $url;
            
    $this->params $params;
            
    $this->expectedResponse trim($expected_response);
            
    $this->match $match;
            if (
    $this->expectedResponse != '') {
                
    $this->expectedResponse explode('|'strtolower($this->expectedResponse));
            } else {
                
    $this->expectedResponse false;
            }
        }

        
    /**
         * 
         * @param object $object Das Object auf dem der Backgroundjob erledigt werden soll.
         * @param string $methodname Name der Methode die auf $object ausgefuehrt werden soll.
         * @param array $params Parameter die an die Methode uebergeben wurden.
         */
        
    public function executeBefore($object$methodname$params) {
            return 
    true;
        }

        
    /**
         *
         * @param object $object Das Object auf dem der Backgroundjob erledigt wurde.
         * @param string $methodname Name der Methode, die auf $object ausgefuehrt wurde.
         * @param array $params Parameter, die an die methode uebergeben wurden.
         * @param $result Rueckgabewert der als Backgroundjob ausgefuehrten Methode.
         */
        
    public function executeAfter($object$methodname$params$result) {
            
    $remote_url_params = ($this->params && $this->params != '') ? $this->params : array();
            
    $cookieJar tempnam(sys_get_temp_dir(), 'BrowseHook');
            
    $browser = new Browser($cookieJar);
            
    $result $browser->Get($this->url$remote_url_params);
            if (
    $this->expectedResponse && count($this->expectedResponse) > 0) {
                
    $result trim(strtolower($result));
                if (!
    $this->match) {
                    
    $result in_array($result,$this->expectedResponse);
                } else {
                    
    $result array_reduce(
                        
    array_map(function($re) use ($result) {logDebug("Matching ~{$re}~");return preg_match("~{$re}~"$result);}, $this->expectedResponse),
                        function (
    $carry$it) {return ($carry || $it);}, false); 
                }
             } else {
                
    $result substr_compare($browser->http_code"2"01);
            }
            return 
    $result;
        }

    Interessant ist hier nur executeAfter(), ich teste die Methode mit einem Echo-Service (von scooterlabs, hier auf deutsch von mir vorgestellt):

    PHP-Code:
    BrowseHook(Session::get('user_id'), 'http://scooterlabs.com/echo.json', array('test' => $testparam), "{\"test\":\"{$testparam}\"}"true); 
    Das ist ok fuer einen oberflaechlichen und manuellen Funktionstest. Aber wie kann ich das ganze automatisch, etwa mit travis-ci.org, und systematischer testen? -- da schwimmen mir grad ein wenig die Faelle weg...

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Also ich persönlich habe Probleme die Funktion executeAfter zu verstehen. Es sind zwar die Parameter schön beschrieben, aber ich weiß nicht was die Funktion tun soll. Hinzu ist das Objekt Browser nicht beschrieben, so weiß ich nicht was das Objekt tut.

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.05.2014
    Beiträge
    6
    Die Parameter existieren wegen des generischen Hook Aufbaus. executAfter wird ausgefuehrt, wenn $object->$methodName($params) ausgefuhert wurde; das ergebnis dieses aufrufs ist $result. Soweit das generische -- der BrowseHook nutzt diese Informationen nicht, sondern ruft die im constructor uebergebene URL auf und testet die http response auf gleichheit oder match mit $expectedResults -- die Broweserklasse wird separat getestet und sollte funktionieren. Hier teste ich, dass executeAfter allgmein funktioniert, nicht die integration in echte services/url/aufrufe. kein reiner unittest, aber auch kein integrationstest -- irgendwas dazwischen!?!?

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Also bei travis-ci.org kann ich Dir nicht helfen, da ich es nicht kenne. Zu systematischer kann ich sagen, Du hast eine Methode die beim Aufruf
    von Methoden aufgerufen wird. Dann solltest du alle möglichenen Mehodenaufrufe durchführen und mit dem von Dir erwarteten Ergebnis vergleichen.
    Das kannst Du manuell tun, oder Du schreibst Dir eine Funktion die die Metodenaufrufe und deren Ergebnisse z.B in eine Datei schreibt und wartest ab.

Lesezeichen

Berechtigungen

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