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

Getting strange errors using Unit tests

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 3 Posters 2.4k 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 Offline
    N Offline
    nickqu
    wrote on last edited by nickqu
    #5

    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 1 Reply Last reply
    0
    • 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