QTest로 유닛 테스트를 작성하고, CMake로 빌드파일 만들어 Visual Studio로 빌드하는데 아래와 같은 오류 메시지가 뜨는 경우가 있다.

 

오류메시지

error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)"

 

원인

main 함수가 없어 entry point가 제대로 설정되지 않았기 때문이다

 

해결책

테스트 케이스가 작성된 cpp 파일 하단에, 아래의 내용을 넣어주면 된다.

QTEST_MAIN(MyFirstTest)
#include "tst_myfirsttest.moc"

 

tst_myfirsttest.cpp 전체 소스

#include <QObject>
#include <QTest>
#include <qDebug>


class MyFirstTest : public QObject
{
    Q_OBJECT

private:
    bool myCondition()
    {
        return true;
    }

private slots:
    void initTestCase()
    {
        qDebug("Called before everything else.");
    }

    void myFirstTest()
    {
        QVERIFY(true);  // check that a condition is satisfied
        QCOMPARE(1, 1); // compare two values
    }

    void mySecondTest()
    {
        QVERIFY(myCondition());
        QVERIFY(1 != 2);
    }

    void cleanupTestCase()
    {
        qDebug("Called after myFirstTest and mySecondTest.");
    }
};

QTEST_MAIN(MyFirstTest)
#include "tst_myfirsttest.moc"

 

CMakeLists.txt

set(_components
    Core
    Test)

foreach(_component ${_components})
    find_package(Qt5${_component})
    list(APPEND QT_LIBRARIES ${Qt5${_component}_LIBRARIES})
    list(APPEND QT_INCLUDES ${Qt5${_component}_INCLUDE_DIRS})
    add_definitions(${Qt5${_component}_DEFINITIONS})
endforeach()

include_directories(${QT_INCLUDES})

find_program(QT_QMAKE_EXECUTABLE qmake)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

enable_testing(true)

add_executable(mytest tst_myfirsttest.cpp)
add_test(NAME mytest COMMAND mytest)
target_link_libraries(mytest PRIVATE ${QT_LIBRARIES})
qt_generate_moc(tst_myfirsttest.cpp tst_myfirsttest.moc TARGET mytest)

+ Recent posts