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
Forum Update on Monday, May 27th 2025

Getting strange errors using Unit tests

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 3 Posters 1.3k Views
  • 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 18 Jun 2020, 19:10 last edited by nickqu
    #1

    Hey, I am learning QT and I wrote a unit test:

    #ifndef TEST_H
    #define TEST_H
    
    #include <QObject>
    #include <QtTest/QTest>
    #include "travelagency.h"
    #include <stdexcept>
    
    class Test : public QObject{
    
        Q_OBJECT
    
    public:
        explicit Test(QObject *parent = 0);
    
    private slots:
        void testCompany();
        void testAirline();
        void testPrice();
    };
    
    #endif // TEST_H
    
    #include "test.h"
    
    Test::Test(QObject *parent) : QObject(parent){
    }
    
    void Test::testCompany(){
        TravelAgency* t = new TravelAgency();
        int companies = t->getDataForTest()[0];
        QCOMPARE(companies,5);
    }
    
    void Test::testAirline(){
        TravelAgency* t = new TravelAgency();
        QCOMPARE(t->getDataForTest()[1], 3);
    }
    
    void Test::testPrice(){
        TravelAgency* t = new TravelAgency();
        QCOMPARE(t->getDataForTest()[2], 31);
    }
    
    

    These are the errors I get:

    ********* Start testing of Test *********
    Config: Using QtTest library 5.14.2, Qt 5.14.2 (x86_64-little_endian-llp64 shared (dynamic) release build; by GCC 7.3.0)
    PASS   : Test::initTestCase()
    A crash occurred in C:\Users\x\Documents\xy\debug\xyz.exe.
    Function time: 23ms Total time: 41ms
    
    Exception address: 0x0000000000407f21
    Exception code   : 0xc0000005
    
    Stack:
    #  1: ZN5QTest15toPrettyUnicodeEPKti() - 0x000000006edc27a0
    #  2: UnhandledExceptionFilter() - 0x00007ffcb892fd00
    #  3: memset() - 0x00007ffcbb522f80
    #  4: _C_specific_handler() - 0x00007ffcbb50c5c0
    #  5: _chkstk() - 0x00007ffcbb5210b0
    #  6: RtlRaiseException() - 0x00007ffcbb4e9e70
    #  7: KiUserExceptionDispatcher() - 0x00007ffcbb51fe10
    #  8: Unable to obtain symbol
    #  9: Unable to obtain symbol
    # 10: ZNK11QMetaMethod6invokeEP7QObjectN2Qt14ConnectionTypeE22QGenericReturnArgument16QGenericArgumentS5_S5_S5_S5_S5_S5_S5_S5_S5_() - 0x0000000068aa2eb0
    # 11: ZN5QTest5qInitEP7QObjectiPPc() - 0x000000006edc83f0
    # 12: ZN5QTest5qInitEP7QObjectiPPc() - 0x000000006edc83f0
    # 13: ZN5QTest5qInitEP7QObjectiPPc() - 0x000000006edc83f0
    # 14: ZN5QTest4qRunEv() - 0x000000006edcb0e0
    # 15: ZN5QTest5qExecEP7QObjectiPPc() - 0x000000006edcb4d0
    # 16: Unable to obtain symbol
    # 17: Unable to obtain symbol
    # 18: Unable to obtain symbol
    # 19: ZN9QMimeType18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv() - 0x0000000068b7bcc0
    # 20: ZN7QAction8activateENS_11ActionEventE() - 0x0000000001213d50
    # 21: ZN5QMenu7setIconERK5QIcon() - 0x00000000013674d0
    # 22: ZN5QMenu10leaveEventEP6QEvent() - 0x000000000136e6f0
    # 23: ZN5QMenu17mouseReleaseEventEP11QMouseEvent() - 0x000000000136f560
    # 24: ZN7QWidget5eventEP6QEvent() - 0x0000000001254ec0
    # 25: ZN5QMenu5eventEP6QEvent() - 0x0000000001371710
    # 26: ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent() - 0x0000000001217980
    # 27: ZN12QApplication6notifyEP7QObjectP6QEvent() - 0x000000000121e370
    # 28: ZN16QCoreApplication20sendSpontaneousEventEP7QObjectP6QEvent() - 0x0000000068a95690
    # 29: ZN19QApplicationPrivate14sendMouseEventEP7QWidgetP11QMouseEventS1_S1_PS1_R8QPointerIS0_Ebb() - 0x000000000121d910
    # 30: ZN14QDesktopWidget11qt_metacallEN11QMetaObject4CallEiPPv() - 0x0000000001266e20
    # 31: ZN14QDesktopWidget11qt_metacallEN11QMetaObject4CallEiPPv() - 0x0000000001266e20
    # 32: ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent() - 0x0000000001217980
    # 33: ZN12QApplication6notifyEP7QObjectP6QEvent() - 0x000000000121e370
    # 34: ZN16QCoreApplication20sendSpontaneousEventEP7QObjectP6QEvent() - 0x0000000068a95690
    # 35: ZN22QGuiApplicationPrivate17processMouseEventEPN29QWindowSystemInterfacePrivate10MouseEventE() - 0x0000000061977640
    # 36: ZN22QGuiApplicationPrivate24processWindowSystemEventEPN29QWindowSystemInterfacePrivate17WindowSystemEventE() - 0x0000000061978f00
    # 37: ZN22QWindowSystemInterface22sendWindowSystemEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE() - 0x0000000061951400
    # 38: ZN21QEventDispatcherWin3213processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE() - 0x0000000068af0800
    # 39: qt_plugin_instance() - 0x000000006a8fd210
    # 40: ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE() - 0x0000000068a93780
    # 41: ZN16QCoreApplication4execEv() - 0x0000000068a9d0e0
    # 42: Unable to obtain symbol
    # 43: Unable to obtain symbol
    # 44: Unable to obtain symbol
    # 45: BaseThreadInitThunk() - 0x00007ffcba337bc0
    # 46: RtlUserThreadStart() - 0x00007ffcbb4ece30
    

    I don't know what I'm doung wrong here I need help.

    My OS is Windows 10 and I am using Qt Creator 4.11.2 Based on Qt 5.14.2 (MSVC 2017, 32 bit) if that makes any difference.

    1 Reply Last reply
    0
    • N nickqu
      19 Jun 2020, 08:10

      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.

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 19 Jun 2020, 08:14 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
      • S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 18 Jun 2020, 19:15 last edited by
        #2

        Hi and welcome to devnet,

        One thing to exclude a Qt issue, can you successfully run the tests if the body of the methods are empty ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • N Offline
          N Offline
          nickqu
          wrote on 18 Jun 2020, 19:21 last edited by
          #3

          Hey SGaist,

          thank you for your help. I erased the body and I don't get any errors. All tests pass.

          ********* Start testing of Test *********
          Config: Using QtTest library 5.14.2, Qt 5.14.2 (x86_64-little_endian-llp64 shared (dynamic) release build; by GCC 7.3.0)
          PASS   : Test::initTestCase()
          PASS   : Test::testCompany()
          PASS   : Test::testAirline()
          PASS   : Test::testPrice()
          PASS   : Test::cleanupTestCase()
          Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted, 27ms
          ********* Finished testing of Test *********
          

          What am I doing wrong?

          1 Reply Last reply
          0
          • S Offline
            S Offline
            SGaist
            Lifetime Qt Champion
            wrote on 18 Jun 2020, 19:22 last edited by
            #4

            Well, it looks like you have a bug somewhere in the code you are testing.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            1
            • N Offline
              N Offline
              nickqu
              wrote on 19 Jun 2020, 07:25 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?

              J 1 Reply Last reply 19 Jun 2020, 07:28
              0
              • N nickqu
                19 Jun 2020, 07:25

                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?

                J Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 19 Jun 2020, 07:28 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 19 Jun 2020, 07:36 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...

                  J 1 Reply Last reply 19 Jun 2020, 07:41
                  0
                  • N nickqu
                    19 Jun 2020, 07:36

                    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...

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 19 Jun 2020, 07:41 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 19 Jun 2020, 07:54 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(); }

                      J 1 Reply Last reply 19 Jun 2020, 07:57
                      0
                      • N nickqu
                        19 Jun 2020, 07:54

                        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(); }

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 19 Jun 2020, 07:57 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 19 Jun 2020, 08:10 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.

                          J 1 Reply Last reply 19 Jun 2020, 08:14
                          0
                          • N nickqu
                            19 Jun 2020, 08:10

                            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.

                            J Offline
                            J Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on 19 Jun 2020, 08:14 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 19 Jun 2020, 08:51 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...

                              J 1 Reply Last reply 19 Jun 2020, 08:56
                              0
                              • N nickqu
                                19 Jun 2020, 08:51

                                @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...

                                J Offline
                                J Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on 19 Jun 2020, 08:56 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 19 Jun 2020, 09:29 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.

                                  J 1 Reply Last reply 19 Jun 2020, 09:32
                                  0
                                  • N nickqu
                                    19 Jun 2020, 09:29

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

                                    J Offline
                                    J Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on 19 Jun 2020, 09:32 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

                                    1/16

                                    18 Jun 2020, 19:10

                                    • Login

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