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)