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

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


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:


class FooTest extends TestCase
{
    public function testFoo()
    {
        $MyModuleInstanceID = IPS_CreateInstance($GUID);
        PREFIX_Foo(MyModuleInstanceID);
        // Error: Call to undefined function PREFIX_Foo()
    }
}   

Wie gehtn das? :slight_smile:

Grüße,
elmcrest

Hi,

Das erste Beispiel müsste ein wenig angepasst werden:

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

Hey Till,

vielen Dank, funktioniert.

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

ok, cool, vielen Dank.

Nützlich hierfür, um die stubs zu aktualisieren:

git submodule update --remote

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