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. Qt Unit test in a project
Forum Updated to NodeBB v4.3 + New Features

Qt Unit test in a project

Scheduled Pinned Locked Moved Solved General and Desktop
31 Posts 6 Posters 15.4k Views 4 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.
  • H HemantSuryawanshi
    24 Nov 2021, 06:49

    I did all the things that you guys suggested and create a subdirectory project using CMake build system. Project is created successfully and then I create a class name Calculator in my src project. Now I am trying to access the methods from Calculator class into tests project to perform unit testing. But the compiler not able to find that methods in Calculator class.
    I also added following line for linking purpose, but still its not working

    target_include_directories(UnitTest PRIVATE ${CMAKE_SOURCE_DIR}/src)
    

    The compiler giving me following errors,

    tests/CMakeFiles/UnitTest.dir/tst_unittest.cpp.obj: In function `UnitTest::test_add()':
    C:/Hemant/Unit_Testing/Testing_subdir/tests/tst_unittest.cpp:31: undefined reference to `Calculator::Calculator(QObject*)'
    C:/Hemant/Unit_Testing/Testing_subdir/tests/tst_unittest.cpp:32: undefined reference to `Calculator::add(int, int)'
    tests/CMakeFiles/UnitTest.dir/tst_unittest.cpp.obj:tst_unittest.cpp:(.rdata$.refptr._ZTV10Calculator[.refptr._ZTV10Calculator]+0x0): undefined reference to `vtable for Calculator'
    

    Did I need to add something extra for the linking of these two subdirectories in my CMakeLists.txt files . Please help @sierdzio @jsulm

    J Online
    J Online
    jsulm
    Lifetime Qt Champion
    wrote on 24 Nov 2021, 07:38 last edited by
    #21

    @HemantSuryawanshi said in Qt Unit test in a project:

    Did I need to add something extra for the linking of these two subdirectories in my CMakeLists.txt files

    You need to add source files (*.cpp) you want to test.
    As you can see from the errors you are missing the source file containing Calculator definition.

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

    1 Reply Last reply
    0
    • H Offline
      H Offline
      HemantSuryawanshi
      wrote on 24 Nov 2021, 07:56 last edited by
      #22

      @jsulm are you trying to say that I also need to add the calculator class into tests project? I already have the Calculator class implemented into src project.

      J 1 Reply Last reply 24 Nov 2021, 08:03
      0
      • H HemantSuryawanshi
        24 Nov 2021, 07:56

        @jsulm are you trying to say that I also need to add the calculator class into tests project? I already have the Calculator class implemented into src project.

        J Online
        J Online
        jsulm
        Lifetime Qt Champion
        wrote on 24 Nov 2021, 08:03 last edited by
        #23

        @HemantSuryawanshi said in Qt Unit test in a project:

        are you trying to say that I also need to add the calculator class into tests project?

        No, you need to add a reference to that file to your test project, something like:

        add_executable(${PROJECT_NAME}
            PATH_TO/calculator.cpp
            tst_unittest.cpp
            ...
        )
        

        If the code you want to test compiles to a lib you could instead add a dependency to this lib.

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

        1 Reply Last reply
        0
        • H Offline
          H Offline
          HemantSuryawanshi
          wrote on 24 Nov 2021, 08:15 last edited by
          #24

          @jsulm Its working now. Thanks for response

          1 Reply Last reply
          0
          • H Offline
            H Offline
            HemantSuryawanshi
            wrote on 24 Nov 2021, 09:40 last edited by
            #25

            Hi, I also want to include Qt Quick Test in same project. I added required directives into project. but I have one problem that I already have the main definition and it will not take another main definition. Please tell me how cam I add

            QUICK_TEST_MAIN(example)
            

            this code into main function? @jsulm

            J 1 Reply Last reply 24 Nov 2021, 09:49
            0
            • H HemantSuryawanshi
              24 Nov 2021, 09:40

              Hi, I also want to include Qt Quick Test in same project. I added required directives into project. but I have one problem that I already have the main definition and it will not take another main definition. Please tell me how cam I add

              QUICK_TEST_MAIN(example)
              

              this code into main function? @jsulm

              J Online
              J Online
              jsulm
              Lifetime Qt Champion
              wrote on 24 Nov 2021, 09:49 last edited by
              #26

              @HemantSuryawanshi said in Qt Unit test in a project:

              I have one problem that I already have the main definition

              Are you trying to test a cpp file containing main()?
              Why?
              There should not be anything to test. If there is something you want to test, then move that functionality in functions/methods outside of that source file.

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

              H 1 Reply Last reply 24 Nov 2021, 09:53
              0
              • J jsulm
                24 Nov 2021, 09:49

                @HemantSuryawanshi said in Qt Unit test in a project:

                I have one problem that I already have the main definition

                Are you trying to test a cpp file containing main()?
                Why?
                There should not be anything to test. If there is something you want to test, then move that functionality in functions/methods outside of that source file.

                H Offline
                H Offline
                HemantSuryawanshi
                wrote on 24 Nov 2021, 09:53 last edited by
                #27

                @jsulm No I want to test qml file which is present in my src project. And I want to integrate both cpp testing and qml testing into in single project which is tests. thats why I want to integrate that macro in main function. How can I do that, any idea?

                J 1 Reply Last reply 24 Nov 2021, 09:54
                0
                • H HemantSuryawanshi
                  24 Nov 2021, 09:53

                  @jsulm No I want to test qml file which is present in my src project. And I want to integrate both cpp testing and qml testing into in single project which is tests. thats why I want to integrate that macro in main function. How can I do that, any idea?

                  J Online
                  J Online
                  jsulm
                  Lifetime Qt Champion
                  wrote on 24 Nov 2021, 09:54 last edited by
                  #28

                  @HemantSuryawanshi said in Qt Unit test in a project:

                  How can I do that, any idea?

                  Make sure you have only one main() in your test project.

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

                  H 1 Reply Last reply 24 Nov 2021, 10:02
                  0
                  • J jsulm
                    24 Nov 2021, 09:54

                    @HemantSuryawanshi said in Qt Unit test in a project:

                    How can I do that, any idea?

                    Make sure you have only one main() in your test project.

                    H Offline
                    H Offline
                    HemantSuryawanshi
                    wrote on 24 Nov 2021, 10:02 last edited by
                    #29

                    @jsulm

                    #include <QtTest>
                    #include <QDebug>
                    #include <tst_unittest.cpp>
                    #include <tst_userdata.cpp>
                    
                    #include <QtQuickTest/quicktest.h>
                    QUICK_TEST_MAIN(example)
                    
                    int main(int argc, char** argv)
                    {
                       int failedTests = 0;
                       failedTests += QTest::qExec(new UnitTest, argc, argv);
                       failedTests += QTest::qExec(new TestUserData, argc, argv);
                    
                       if(failedTests > 0){
                           qDebug() << "total number of failed tests: " << failedTests;
                       }else{
                           qDebug() << "all tests passed :)";
                       }
                       return failedTests;
                    }
                    
                    

                    This is my main file. My project contains multiple unit tests including Qt test and Qt Quick test. In this I am getting error that redefinition of main function due to the QUICK_TEST_MAIN Macro.

                    J 1 Reply Last reply 24 Nov 2021, 10:23
                    0
                    • H HemantSuryawanshi
                      24 Nov 2021, 10:02

                      @jsulm

                      #include <QtTest>
                      #include <QDebug>
                      #include <tst_unittest.cpp>
                      #include <tst_userdata.cpp>
                      
                      #include <QtQuickTest/quicktest.h>
                      QUICK_TEST_MAIN(example)
                      
                      int main(int argc, char** argv)
                      {
                         int failedTests = 0;
                         failedTests += QTest::qExec(new UnitTest, argc, argv);
                         failedTests += QTest::qExec(new TestUserData, argc, argv);
                      
                         if(failedTests > 0){
                             qDebug() << "total number of failed tests: " << failedTests;
                         }else{
                             qDebug() << "all tests passed :)";
                         }
                         return failedTests;
                      }
                      
                      

                      This is my main file. My project contains multiple unit tests including Qt test and Qt Quick test. In this I am getting error that redefinition of main function due to the QUICK_TEST_MAIN Macro.

                      J Online
                      J Online
                      jsulm
                      Lifetime Qt Champion
                      wrote on 24 Nov 2021, 10:23 last edited by
                      #30

                      @HemantSuryawanshi said in Qt Unit test in a project:

                      I am getting error that redefinition of main function due to the QUICK_TEST_MAIN Macro

                      Of course, you have two main() functions now.
                      I suggest you split your C++ and Qt Quick tests.

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

                      H 1 Reply Last reply 24 Nov 2021, 12:53
                      0
                      • J jsulm
                        24 Nov 2021, 10:23

                        @HemantSuryawanshi said in Qt Unit test in a project:

                        I am getting error that redefinition of main function due to the QUICK_TEST_MAIN Macro

                        Of course, you have two main() functions now.
                        I suggest you split your C++ and Qt Quick tests.

                        H Offline
                        H Offline
                        HemantSuryawanshi
                        wrote on 24 Nov 2021, 12:53 last edited by
                        #31

                        @jsulm how can I link the qml file to the Qt Quick test project. I tried with same way as I link cpp file earlier, but its not working.

                        1 Reply Last reply
                        0

                        21/31

                        24 Nov 2021, 07:38

                        • Login

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