Funktion mit Rückgabe parameter in Unit test geht das?



  • Hallo Zusammen,

    Kann ich in einen Qt Unit test einen Funktion mit Rückgabeparameter schreiben?
    Geht das?

    danke


  • Qt Champions 2018

    @Galilio

    Ja, kannst du mit der Einschränkung das in solch einer Funktion die Makros QVERIFY und QCOMPARE nicht funktionieren.

    Dies lässt sich über eigene Testfunktionen mit if und entsprechender Fehlerausgabe aber umgehen.

    Grüße



  • @aha_1980
    mir geht um diese Codeabschnitt

        QQmlEngine engine;
        engine.addImportPath("qrc:/");
    
        QScopedPointer<CQtClasseA> mcClass(new CQtClasseA);
        engine.rootContext()->setContextProperty( "myClass", mcClass.data() );
    
        QScopedPointer<CQtWindowManager> windowManager(new CQtWindowManager);
        engine.rootContext()->setContextProperty( "windowManager", windowManager.data() );
    
        qmlRegisterType<CQtWindowManager>("WindowManager", 1, 0, "TUserAction");
    
        QQuickView view(&engine, 0);
        view.setSource(QUrl("qrc:/qml_test/tst_QQttestClass.qml"));
        windowManager->setQuickView(&view);
    
        QQuickItem* testItem = view.findChild<QQuickItem*>( "test_QQttestClass" );
        Q_ASSERT(testItem);
    	
    	
    

    , die ich gerne in eine Fkt kapseln möchte,
    weil es sich wiederholt bei jede Funktion


  • Qt Champions 2018

    @Galilio said in Funktion mit Rückgabe parameter in Unit test geht das?:

    , die ich gerne in eine Fkt kapseln möchte,
    weil es sich wiederholt bei jede Funktion

    Und was ist jetzt Dein Problem?



  • Wenn ich diese so kapsele:

     QQuickItem& TestClass::itemValue()
    { 
    	QQmlEngine engine;
        engine.addImportPath("qrc:/");
    
        QScopedPointer<CQtClasseA> mcClass(new CQtClasseA);
        engine.rootContext()->setContextProperty( "myClass", mcClass.data() );
    
        QScopedPointer<CQtWindowManager> windowManager(new CQtWindowManager);
        engine.rootContext()->setContextProperty( "windowManager", windowManager.data() );
    
        qmlRegisterType<CQtWindowManager>("WindowManager", 1, 0, "TUserAction");
    
        QQuickView view(&engine, 0);
        view.setSource(QUrl("qrc:/qml_test/tst_QQttestClass.qml"));
        windowManager->setQuickView(&view);
    
        QQuickItem* testItem = view.findChild<QQuickItem*>( "test_QQttestClass" );
        Q_ASSERT(testItem);
    	return *testItem;
    }
    

    dann crashed das Unit Test bei der Ausführung.


  • Qt Champions 2018

    @Galilio Und welche Untersuchungen hast Du vorgenommen um den Crash einzugrenzen?

    Tip: view ist eine lokale Variable und du gibst einen Zeiger darauf zurück. Boom



  • @aha_1980 said in Funktion mit Rückgabe parameter in Unit test geht das?:

    Und welche Untersuchungen hast Du vorgenommen um den Crash einzugrenzen?

    das QQuickView view vielleicht als globale variable in der class zu deklarieren



  • @aha_1980

    Hast du bitte eine Idee wie ich das Crasch verhindern kann?

    Danke


  • Qt Champions 2018

    @Galilio said in Funktion mit Rückgabe parameter in Unit test geht das?:

    das QQuickView view vielleicht als globale variable in der class zu deklarieren

    Zum Beispiel. Dabei musst Du natürlich beachten, dass dieses View von anderen Objekten abhängt die dann evtl. auch global definiert werden müssen.



  • @aha_1980
    folgende globale Variablen habe ich deklariert:

            private:
            QQmlEngine engine;
            QQuickView view;
    

    und wenn ich die in der Funktion "itemValue" verwende dann geht es auch nicht.
    was mache ich denn falsch?
    Danke


  • Qt Champions 2018

    @Galilio said in Funktion mit Rückgabe parameter in Unit test geht das?:

    und wenn ich die in der Funktion "itemValue" verwende dann geht es auch nicht.

    "Geht nicht" ist keine Fehlerbeschreibung.

    was mache ich denn falsch?

    Das kann ich dir so ohne weiteres auch nicht sagen. Der Debugger aber wahrscheinlich schon.

    Du musst schon selbst weiter eingrenzen woher das Problem kommt.

    Mitunter ist es einfacher, mit einem leeren Projekt anzufangen und schrittweise Code hinzuzufügen, bis das Problem auftritt. Dann kannst Du bessere Fragen stellen bzw. kommst selbst auf die Antwort.

    Grüße


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.