+ Antworten
Ergebnis 1 bis 7 von 7
  1. #1
    Registriert seit
    Jan 2020
    Beiträge
    9

    Standard phpunit tests für Modul mit SelectFile - Idee IPS_GetStatus schläft fehl

    Guten Tag zusammen,

    ich habe ein Modul mit folgenden Details:

    PHP-Code:
    class KNXer extends IPSModule
    {
        public function 
    Create()
        {
            
    parent::Create();

            
    $this->RegisterPropertyString('EtsXmlFile''');
        }


        public function 
    ApplyChanges()
        {
            
    $rawData base64_decode($this->ReadPropertyString('EtsXmlFile'));

            if (@
    simplexml_load_string($rawData)) {
                
    $data simplexml_load_string($rawData);
                
    $name $data->GroupRange[13]->GroupRange[0]->GroupAddress[0]['Name'];
                
    $this->SendDebug('KNXer', (string) $name0);
            } else {
                
    $this->SetStatus(201);
            }

            
    parent::ApplyChanges();
        }

    In der form.json ist entsprechend eine Statusmeldung für den Fehler, aber ich denke das ist jetzt irrelevant.

    In meinen Tests würde ich gerne den Status abfragen wenn ich richtiges oder falsches XML in das Modul lade. Dies sieht bisher so aus:
    PHP-Code:
        public function testParseXml()
        {
            
    $KNXerModulID IPS_CreateInstance($this->KNXerID);
            
    $file file_get_contents(__DIR__ '/fixtures/ga_test.xml'true);

            
    IPS_SetProperty($KNXerModulID'EtsXmlFile'$file);
            
    IPS_ApplyChanges($KNXerModulID);

            
    IPS_GetStatus($KNXerModulID); //schläft fehl da nicht vorhanden

            
    $this->assertEquals('true''true'); // just to calm down phpunit for now
        

    So, IPS_GetStatus ist nicht vorhanden, jetzt stellt sich die Frage ob das nur an den Stubs liegt oder ob das generell nicht geht. Die Stubs schnell zu fixen habe ich versucht, ist aber doch etwas zu viel für mich, mit der geringen Erfahrung in PHP und IPS.
    Oder ist das generell nicht sinnvoll und es gibt einen bessern Weg das zu testen?

    Also ich möchte die Validierung der hochgeladenen Datei testen, nur um das Ziel nochmal klar zu machen

    Danke für alle Hinweise.

    elmcrest

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,597

    Geändert von Nall-chan (15.01.20 um 11:22 Uhr)
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    Jan 2020
    Beiträge
    9

    Alles klar, danke, damit konnte ich es lösen. Und zwar wie nachfolgend:

    PHP-Code:
        public function testParseXml()
        {
            
    $KNXerModulID IPS_CreateInstance($this->KNXerID);

            
    $file file_get_contents(__DIR__ '/fixtures/ga_test.txt'true);

            
    IPS_SetProperty($KNXerModulID'EtsXmlFile'$file);
            
    IPS_ApplyChanges($KNXerModulID);
            
    $KNXerInstance IPS_GetInstance($KNXerModulID);

            
    $this->assertEquals(201$KNXerInstance['InstanceStatus']);
        } 
    Verbesserungsvorschläge werden gerne angenommen

    Zur Erläuterung des Codes ... Es wird das Modul IPS_CreateInstance erstmal instanziiert, das Objekt also erstellt.
    Dann werfe ich mit IPS_SetProperty meine vorher geöffnete Datei in die Property namens "EtsXmlFile" wie in module.php angelegt.
    Anschließend wird die ApplyChanges aufgerufen von extern, daher mit dem Prefix IPS_
    Final wird die Instance nochmal frisch aus dem Ram gezogen um sie in der Variable $KNXerInstance zu speichern um damit widerrum den Vergleich zu machen mit assertEquals.

    Ich erkläre das auch für mich selbst, also falls da etwas falsch ist, bitte berichtigen

  4. #4
    Registriert seit
    Jan 2020
    Beiträge
    9

    Ok, da ist scheinbar doch noch etwas falsch. Ich werden das hier updaten sobald ich es gelöst habe.

  5. #5
    Registriert seit
    Jan 2020
    Beiträge
    9

    Also das ganze scheint etwas komplizierter zu sein als gedacht, wäre für jede weitere Hilfe dankbar

  6. #6
    Registriert seit
    Feb 2017
    Beiträge
    1,551

    Was funktioniert denn nicht? Von der Testmethode her sieht das passend aus, ich kenne aber das Modul nicht.

  7. #7
    Registriert seit
    Jan 2020
    Beiträge
    9

    So, nachdem das größte ein mir unbekanntes Problem war, dass sich (für mich) nur durch einen Windows Neustart lösen lässt, konnte ich weiter machen. Irgendwie geht die print_r und echo Ausgabe verloren und ich bekomm nichts mehr mit, warum habe ich keine Ahnung.

    Jedenfalls mit print_r und echo ging es wieder weiter und es ergab sich, dass man auch wenn man die Tests ausführt (natürlich) die Datei nach dem öffnen base64 encoden muss um das Browser-Verhalten zu simulieren.

    Hiermit geht der Test wie erwartet durch und nutzt auch das Modul-Code:

    PHP-Code:
        public function testParseWrongXml()
        {
            
    $KNXerModulID IPS_CreateInstance($this->KNXerID);

            
    $filestring base64_encode(file_get_contents(__DIR__ '/fixtures/ga_test_ets4.xml'true));

            
    IPS_SetProperty($KNXerModulID'EtsXmlFile'$filestring);
            
    IPS_ApplyChanges($KNXerModulID);

            
    $KNXerInstance IPS_GetInstance($KNXerModulID);
            
    $this->assertEquals(202$KNXerInstance['InstanceStatus']);
        } 

Ähnliche Themen

  1. Modul Update schlägt fehl bei lokal geändertem Modul
    Von bumaas im Forum Allgemeine Diskussion
    Antworten: 15
    Letzter Beitrag: 13.03.19, 14:05
  2. Idee für Showcase gesucht
    Von bbernhard im Forum Projekt Showcase
    Antworten: 16
    Letzter Beitrag: 23.12.18, 11:09
  3. Antworten: 0
    Letzter Beitrag: 13.01.16, 23:50
  4. Antworten: 12
    Letzter Beitrag: 19.06.15, 14:07
  5. Frage oder Idee zu calendar Modul
    Von gremlin36 im Forum IP-Symcon WIIPS
    Antworten: 5
    Letzter Beitrag: 27.05.08, 16:38

Stichworte