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

    I want to do the same thing but for CMAKE project. Anyone have idea? @sierdzio

    sierdzioS Offline
    sierdzioS Offline
    sierdzio
    Moderators
    wrote on last edited by
    #19

    @HemantSuryawanshi said in Qt Unit test in a project:

    I want to do the same thing but for CMAKE project. Anyone have idea? @sierdzio

    include(CTest)
    add_subdirectory(tests)
    enable_testing()
    

    :-) You can see some example code here: https://github.com/milosolutions/mwizardtemplate/blob/master/CMakeLists.txt

    (Z(:^

    1 Reply Last reply
    3
    • H Offline
      H Offline
      HemantSuryawanshi
      wrote on last edited by
      #20

      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

      jsulmJ 1 Reply Last reply
      0
      • H HemantSuryawanshi

        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

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on 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 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.

          jsulmJ 1 Reply Last reply
          0
          • H HemantSuryawanshi

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

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on 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 last edited by
              #24

              @jsulm Its working now. Thanks for response

              1 Reply Last reply
              0
              • H Offline
                H Offline
                HemantSuryawanshi
                wrote on 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

                jsulmJ 1 Reply Last reply
                0
                • H HemantSuryawanshi

                  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

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on 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
                  0
                  • jsulmJ jsulm

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

                    jsulmJ 1 Reply Last reply
                    0
                    • H HemantSuryawanshi

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

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on 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
                      0
                      • jsulmJ jsulm

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

                        jsulmJ 1 Reply Last reply
                        0
                        • H HemantSuryawanshi

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

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on 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
                          0
                          • jsulmJ jsulm

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

                            • Login

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