Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Getting strange errors using Unit tests
Qt 6.11 is out! See what's new in the release blog

Getting strange errors using Unit tests

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 3 Posters 3.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N nickqu

    I have a follow up question. I was able to fix the issue with the strange errors.

    I developed a UI in wich a user can choose a .txt file from the system and the data will be displayed in a table widget. It data is also being processed and put in vectors.

    void TravelAgency::on_actionDatei_einlesen_triggered(){
        QFile file(QFileDialog::getOpenFileName(this, tr("Open File"), "/home", tr("Text (*.txt)")));
        if (!file.exists())
            return;
        file.open(QIODevice::ReadOnly | QIODevice::Text);
        if (!file.isOpen())
            cerr << "error...";
    
        QTextStream stream(&file);
        QString line = stream.readLine();
        while (!line.isNull()) {
            string sLine = line.toStdString();
    
            fillVectors(sLine.at(0), sLine.substr(2));
    
            line = stream.readLine();
        }
    
        cout << "vector A size: " << a.size() << endl; //return a non zero value but the getter function returns 0 in the unit test.
    
        Test test;
        QTest::qExec(&test);
    }
    

    And lets say I have a getter Method wich simply return the size of the vector which was filled and I have the following test:

    #include "test.h"
    
    Test::Test(QObject *parent) : QObject(parent){
    }
    
    void Test::testCompany(){
        TravelAgency* t = new TravelAgency();
        int sizeA= t->getSizeOfVectorA();
        QCOMPARE(sizeA,5);
    }
    

    The test fails because the getter function returns the value 0, but I am expecting a non zero value. Am I doing something wrong?

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #6

    @nickqu said in Getting strange errors using Unit tests:

    but I am expecting a non zero value

    Why?
    You did not fill the vector, right?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • N Offline
      N Offline
      nickqu
      wrote on last edited by
      #7

      The vector is filled correctly. It all works fine. While I was doing some debugging:

       cout << "vector A size: " << a.size() << endl;
      

      displayed the correct size value of the vector. Before I am doing

      Test test; 
      QTest::qExec(&test);
      

      But the getter simply returns 0 in the test. I don't know why...

      jsulmJ 1 Reply Last reply
      0
      • N nickqu

        The vector is filled correctly. It all works fine. While I was doing some debugging:

         cout << "vector A size: " << a.size() << endl;
        

        displayed the correct size value of the vector. Before I am doing

        Test test; 
        QTest::qExec(&test);
        

        But the getter simply returns 0 in the test. I don't know why...

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by jsulm
        #8

        @nickqu Where do you fill the vector? You do not fill it in the constructor, right? And on_actionDatei_einlesen_triggered() is not called in your test.
        Can you show your getter?

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • N Offline
          N Offline
          nickqu
          wrote on last edited by
          #9

          No, I fill the vector in the fillVectors() function.

          Is it necessary that I call on_actionDatei_einlesen_triggered() in my test? Because I am running the program and choosing a file from the .txt system. So I trigger the function which takes the .txt file processes it and fills the vector(s). And then I am exec. the test?

          The getter function is simly:
          ``
          int TravelAgency::getSizeOfVectorA(){ return a.size(); }

          jsulmJ 1 Reply Last reply
          0
          • N nickqu

            No, I fill the vector in the fillVectors() function.

            Is it necessary that I call on_actionDatei_einlesen_triggered() in my test? Because I am running the program and choosing a file from the .txt system. So I trigger the function which takes the .txt file processes it and fills the vector(s). And then I am exec. the test?

            The getter function is simly:
            ``
            int TravelAgency::getSizeOfVectorA(){ return a.size(); }

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by jsulm
            #10

            @nickqu said in Getting strange errors using Unit tests:

            Is it necessary that I call on_actionDatei_einlesen_triggered()

            It is necessary that the vector gets filled somehow and in the test code you posted I don't see anything like that.
            Where do you fill the vector in this code:

            void Test::testCompany(){
                TravelAgency* t = new TravelAgency();
                int sizeA= t->getSizeOfVectorA();
                QCOMPARE(sizeA,5);
            }
            

            ?

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • N Offline
              N Offline
              nickqu
              wrote on last edited by
              #11

              The vectors don't get filled in the test. They get filled in te while loop in on_actionDatei_einlesen_triggered() function with the fillVectors() function.

              The way that I was expecting it was this: I run the programm. The Programm Window opens. I choose a file. The while loop fills the vector(s) with the fillVectors() method.
              Until now it works, because

              cout << "vector A size: " << a.size() << endl;
              

              right after the while loop, displays the correct vector size.

              Now I execute the test

              Test test; 
              QTest::qExec(&test);
              

              And the getter function returns the correct vector size in the test.

              jsulmJ 1 Reply Last reply
              0
              • N nickqu

                The vectors don't get filled in the test. They get filled in te while loop in on_actionDatei_einlesen_triggered() function with the fillVectors() function.

                The way that I was expecting it was this: I run the programm. The Programm Window opens. I choose a file. The while loop fills the vector(s) with the fillVectors() method.
                Until now it works, because

                cout << "vector A size: " << a.size() << endl;
                

                right after the while loop, displays the correct vector size.

                Now I execute the test

                Test test; 
                QTest::qExec(&test);
                

                And the getter function returns the correct vector size in the test.

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #12

                @nickqu said in Getting strange errors using Unit tests:

                The way that I was expecting it was this: I run the programm. The Programm Window opens. I choose a file. The while loop fills the vector(s) with the fillVectors()

                This is not how unit tests work.
                There should not be any interaction with users.
                Why don't you simply call on_actionDatei_einlesen_triggered() in the test before checking the vector size?

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                1
                • N Offline
                  N Offline
                  nickqu
                  wrote on last edited by nickqu
                  #13

                  @jsulm thanks, it works now. But how can I make it, so that in the test on_actionDatei_einlesen_triggered() ist executed, when the (menu) button was clicked? Right now I get asked to choose a file as soon as the programm starts and not when the button is clicked...

                  jsulmJ 1 Reply Last reply
                  0
                  • N nickqu

                    @jsulm thanks, it works now. But how can I make it, so that in the test on_actionDatei_einlesen_triggered() ist executed, when the (menu) button was clicked? Right now I get asked to choose a file as soon as the programm starts and not when the button is clicked...

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #14

                    @nickqu Take a look at https://doc.qt.io/qt-5/qtest.html
                    There are several mousePress overloads.

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      nickqu
                      wrote on last edited by
                      #15

                      @jsulm can you make an example? I don't understand how the mousePress overloads are goingt to help me with my case.

                      jsulmJ 1 Reply Last reply
                      0
                      • N nickqu

                        @jsulm can you make an example? I don't understand how the mousePress overloads are goingt to help me with my case.

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #16

                        @nickqu Take a look at https://doc.qt.io/qt-5/qttestlib-tutorial3-example.html

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        1

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved