Мне удалось настроить мой проект и запустить все тесты, поэтому я думаю, что лучше написать об этом здесь для всех будущих людей, которым это может понадобиться. Я не собираюсь вставлять сюда содержимое каждого файла, но я публикую наиболее важные из них, которые доставили мне неприятности. Например, testentity.cpp
и testentity.h
- это просто обычные исходные и заголовочные файлы для простого класса C ++, и я не думаю, что здесь нужно объяснять компоненты qml. Если какой-либо файл не описан ниже, вы можете предположить, что он был в порядке с самого начала, и Qt Creator сделал все сам или изменения просто тривиальны.
ОРГАНИЗАЦИЯ ФАЙЛА:
.
├── ExampleProject
│ ├── ExampleProject.pro
│ ├── controls
│ │ ├── another_module
│ │ │ ├── testentity.cpp
│ │ │ └── testentity.h
│ │ ├── example_module
│ │ │ ├── testclass.cpp
│ │ │ ├── testclass.h
│ │ │ ├── testsubject.cpp
│ │ │ └── testsubject.h
│ │ ├── components
│ │ │ ├── applayout
│ │ │ │ ├── LayoutComponent.qml
│ │ │ │ └── SideMenu.qml
│ │ │ └── controls
│ │ │ └── PositioningDummy.qml
│ │ ├── controls.pro
│ │ ├── main.cpp
│ │ ├── main.qml
│ │ └── qml.qrc
│ ├── tests_cpp
│ │ ├── main.cpp
│ │ ├── tests_cpp.pro
│ │ ├── tst_controls.cpp
│ │ ├── tst_controls.h
│ │ ├── tst_layout.cpp
│ │ └── tst_layout.h
│ └── tests_qt_quick
│ ├── main.cpp
│ ├── tests_qt_quick.pro
│ ├── tst_controls.qml
│ └── tst_layout.qml
└── README.md
mainprojectfile.pro
TEMPLATE = subdirs
SUBDIRS += \
controls \
tests_cpp \
tests_qt_quick
tests_ cpp .pro
QT += testlib
QT -= gui
CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += tst_controls.cpp \
main.cpp \
tst_layout.cpp
HEADERS += \
tst_controls.h \
tst_layout.h
# 1) Define each module as INCDIR_MODULE_NAME
# 2) Add INCDIR_MODULE_NAME to INCLUDEPATH
# 3) Add each of the classes you want to test into HEADERS and SOURCES
INCDIR_EXAMPLE_MODULE = ../controls/example_module
INCDIR_ANOTHER_MODULE = ../controls/another_module
INCLUDEPATH += \
$$INCDIR_EXAMPLE_MODULE \
$$INCDIR_ANOTHER_MODULE
SOURCES += \
$$INCDIR_EXAMPLE_MODULE/testclass.cpp \
$$INCDIR_EXAMPLE_MODULE/testsubject.cpp \
$$INCDIR_ANOTHER_MODULE/testentity.cpp \
HEADERS += \
$$INCDIR_EXAMPLE_MODULE/testclass.h \
$$INCDIR_EXAMPLE_MODULE/testsubject.h \
$$INCDIR_ANOTHER_MODULE/testentity.h
tests_cpp / main. cpp
#include <QTest>
#include "tst_layout.h"
#include "tst_controls.h"
int main(int argc, char *argv[])
{
int status = 0;
Tst_Layout tst_layout;
status |= QTest::qExec(&tst_layout, argc, argv);
Tst_Controls tst_controls;
status |= QTest::qExec(&tst_controls, argc, argv);
return status;
}
tests_cpp / tst_layout.h
#ifndef TST_LAYOUT_H
#define TST_LAYOUT_H
#include <QtTest>
// include class from our controls project
#include "testentity.h"
class Tst_Layout : public QObject
{
Q_OBJECT
public:
explicit Tst_Layout(QObject *parent = nullptr);
private slots:
void initTestCase();
void cleanupTestCase();
void test_case1();
};
#endif
tests_qt_quick.pro
CONFIG += warn_on qmltestcase
TEMPLATE = app
DISTFILES += \
tst_controls.qml \
tst_layout.qml
SOURCES += \
main.cpp
tests_qt_quick / tst_layout.qml
/**
* tst_layout.qml
* Created: 04.03.2020
*
* Author: Jakub Dabros
* Copyright (c) 2020 Prodromus Ltd.
*
* Description: Plik testow jednostkowych dla komponentow odpowiadajacych za layout.
*/
import QtQuick 2.12
import QtTest 1.12
import "../controls/components/applayout" as AppLayout
import "../controls/components/controls" as Controls
TestCase {
name: "Layout"
function initTestCase() {}
function cleanupTestCase() {}
// please bear in mind that test functions below are not my actual tests
// they are here only to show the very basics of how to set up Qt Quick tests
function test_layoutEntityReturnTrue() {
verify(layoutEntity.returnTrue(),("Put some test fail message here."))
}
function test_sideMenuReturnTrue() {
verify(layoutEntity.returnTrue(),("Put some test fail message here."))
}
AppLayout.LayoutComponent {
id: layoutEntity
}
AppLayout.SideMenu {
id: sideMenuEntity
}
}