+ Antworten
Ergebnis 1 bis 6 von 6
  1. #1
    Registriert seit
    Jan 2020
    Beiträge
    29

    Standard automatisiertes Testen von Modulen Error: Call to a member function foo() on array

    Hallo zusammen,

    um meine unit tests etwas besser zu strukturieren würde ich gerne einzelne member functions aufrufen und entsprechend mit assert statements ergebnisse erwarten.

    nehmen wir an folgendes Modul:
    PHP-Code:
    <?php

    declare(strict_types=1);

    class 
    MyModule extends IPSModule
    {
        public function 
    Create()
        {
            
    parent::Create();
        }

        public function 
    ApplyChanges()
        {
            
    parent::ApplyChanges();
        }

        public function 
    Foo()
        {
            echo 
    "Hallo Welt";
        }
    }
    wenn ich nun im unit test versuche Foo() aufzurufen, funktioniert das weder mit
    PHP-Code:
    class FooTest extends TestCase
    {
        public function 
    testFoo()
        {
            
    $MyModuleInstanceID IPS_CreateInstance($GUID);
            
    $MyModuleInstance IPS_GetInstance($MyModuleInstanceID)
            
    $MyModuleInstance->Foo();
            
    // Error: Call to a member function Foo() on array
        
    }

    noch funktioniert es mit:
    PHP-Code:
    class FooTest extends TestCase
    {
        public function 
    testFoo()
        {
            
    $MyModuleInstanceID IPS_CreateInstance($GUID);
            
    PREFIX_Foo(MyModuleInstanceID);
            
    // Error: Call to undefined function PREFIX_Foo()
        
    }

    Wie gehtn das?

    Grüße,
    elmcrest

  2. #2
    Registriert seit
    Aug 2019
    Beiträge
    28

    Hi,

    Das erste Beispiel müsste ein wenig angepasst werden:

    PHP-Code:
    class FooTest extends TestCase
    {
        public function 
    testFoo()
        {
            
    $MyModuleInstanceID IPS_CreateInstance($GUID);
            
    $MyModuleInstance IPS\InstanceManager::getInstanceInterface($MyModuleInstanceID);
            
    $MyModuleInstance->Foo();
        }

    Ich werde versuchen die Stubs dahingehend anzupassen, dass die globalen Funktionen automatisch registriert werden.
    Somit würde dann dein 2. Beispiel funktionieren

    Grüße,

    Till

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

    Hey Till,

    vielen Dank, funktioniert.

  4. #4
    Registriert seit
    Aug 2019
    Beiträge
    28

    Hallo nochmal,

    Die Stubs sind angepasst, somit sollte das 2. Beispiel auch funktionieren.

    added automated registration for module functions symcon/SymconStubs@98cf441

    Grüße ,

    Till

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

    ok, cool, vielen Dank.

    Nützlich hierfür, um die stubs zu aktualisieren:
    Code:
    git submodule update --remote

  6. #6
    Registriert seit
    Jan 2020
    Beiträge
    29

    Ich kann wohl meine Beiträge nicht bearbeiten, egal - hiermit die Rückmeldung dass das 2. Beispiel bei mir funktioniert.

Ähnliche Themen

  1. Fatal error: Call to undefined function mysql_connect()
    Von ckerndl im Forum Allgemeine Diskussion
    Antworten: 65
    Letzter Beitrag: 26.08.17, 20:00
  2. IP-Symcon 4.3 Features - Teil 2: Automatisiertes Testen
    Von Dr. Niels im Forum Neuigkeiten & Ankündigungen
    Antworten: 1
    Letzter Beitrag: 23.08.17, 07:42
  3. Call to undefined function (Funktionen von Modulen ab und zu "fehlerhaft")
    Von Bayaro im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 0
    Letzter Beitrag: 15.03.16, 12:07
  4. Antworten: 4
    Letzter Beitrag: 07.06.14, 15:56
  5. Antworten: 2
    Letzter Beitrag: 27.03.11, 10:43

Stichworte