Qt에서 QTest project와 test classes를 생성하는 방법을 쓴 글입니다.
QT에서 TestCase 만들기
QT에서 testcase를 작성하려고 하니 공식 document는 꽤 불편해서 여러 사이트를 뒤져가며 삽질한 경험을 공유한다.
SubDir Project 생성
new project/Subdirs Project
생성한다.
생성할경우 바로 application project
를 각자 프로젝트에 맞게 생성한다. 그후 add new/Other Project/Auto Test Project
로 test code를 작성할 project를 생성한다.
TestCase 작성
QT에서 생성해주는 test project를 사용할 경우, 기본적으로 프로젝트 하나에 test code하나만 사용하게 돼있다.
아마 위대로 하셨으면 아래와 같이됐을 것 이다. build & qmake를 하고 실행하면 문제없이 돌아갈 것 이다.
#include <QtTest>
class TestMain : public QObject
{
Q_OBJECT
public:
TestMain();
~TestMain();
private slots:
void test_case1();
};
TestMain::TestMain()
{ }
TestMain::~TestMain()
{ }
void TestMain::test_case1()
{
QCOMPARE(true, true);
}
QTEST_APPLESS_MAIN(TestMain)
#include "tst_main.moc"
TestCase in several files
하지만 testcase를 작성하는 시점에서 testcode가 한 코드로 해결될 정도면 testcode를 작성하지도 않았을 것 이다.
하지만 QT의 공식 document에 따라 여러 테스트 코드 파일에 #include "tst_code.moc
를 각각하게 되면, test가 진행되지 않는다.
그래서 test project에 main.cpp를 만들고 main.cpp에서 테스트를 각 테스트 별로 만든 class를 실행하면 된다. test class의 source/header 파일은 일반적인 cpp파일 작성하듯이 해주면 된다.
아래 이미지는 필자의 프로젝트 실제 test결과를 담은 내용이다. testcase code를 test class로 분리함으로서 각 class의 test결과를 보여준다. 리스트의 토글을 열어보면, 디버그 메세지/warning/compare result 등등이 있다.
main.cpp
#include <QTest>
#include <QApplication>
#include "tst_project.h"
#include "tst_main.h"
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
{
TestProject tp;
QTest::qExec(&tp, argc, argv);
}
{
TestMain tm;
QTest::qExec(&tm, argc, argv);
}
}
tst_main.cpp
#include "tst_main.h"
void TestMain::testcase1(void)
{
QCOMPARE(true, true);
}
void TestMain::testInteger(void)
{
QCOMPARE(1, 1);
}
tst_main.h
#ifndef TST_MAIN_H
#define TST_MAIN_H
#include <QtTest>
#include <QCoreApplication>
// add necessary includes here
#include "mainwindow.h"
class TestMain : public QObject
{
Q_OBJECT
public:
TestMain() {}
~TestMain(){}
private slots:
void testcase1(void);
void testInteger(void);
private:
MainWindow mw;
};
#endif // TST_MAIN_H