Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Инструкция подключения GoogleTest и GoogleMock к Qt Creator в несколько кликов без CMake

Запись от 8Observer8 размещена 21.01.2021 в 15:05
Показов 19561 Комментарии 0
Метки c++, mock, qt, unit-test

Содержание блога

Исходники: Calculator_QtCpp.zip (5.4 Кб)

В QtCreator подключение GTest и GMock происходит в несколько кликов из исходников без использования CMake для сборки в библиотеки.
  • Скачиваем архив релиза, который включает в себя GTest и GMock: https://github.com/google/googletest/releases
  • Извлекаем архив в папку, например: E:\Libs
  • В Qt Creator выбираем: "File" > "New Project" > "Other Project" > "Auto Test Project".
  • В выпадающем списке "Test framework" выбираем "Google Test".
  • В поле "Test suite name" вводим "MySuiteName", а в поле "Test case name" вводим "MyCaseName"
  • Указываем в поле "Googletest source directory" папку исходников, например: "E:\Libs\googletest-release-1.10.0", где лежат папки "googletest" и "googlemock"

Нажмите на изображение для увеличения
Название: 50b511df-821e-465f-887a-b4242f635625.png
Просмотров: 2131
Размер:	4.6 Кб
ID:	6724

В прикреплённом примере есть основной проект Calculator_QtCpp и проект с тестами Calculator_Tests, который лежит в папке Tests внутри папки основного проекта.

Обработчик нажатия на кнопку в основном проекте:
C++ (Qt)
1
2
3
4
5
6
7
8
void MainWindow::on_pushButton_clicked()
{
    float a = ui->aLineEdit->text().toFloat();
    float b = ui->bLineEdit->text().toFloat();
    Calculator calcultor;
    float result = calcultor.add(a, b);
    ui->resultLineEdit->setText(QString::number(result));
}
Unit-тест:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef TST_MYCASENAME_H
#define TST_MYCASENAME_H
 
#include <gtest/gtest.h>
#include <gmock/gmock-matchers.h>
#include "Calculator.h"
 
using namespace testing;
 
TEST(MySuiteName, MyCaseName)
{
    Calculator calc;
    float actual = calc.add(5, 6);
    float expected = 11.0f;
    ASSERT_FLOAT_EQ(expected, actual);
}
 
#endif // TST_MYCASENAME_H
Исходники

Calculator_QtCpp

Calculator_QtCpp.pro

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
QT       += core gui
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
CONFIG += c++11
 
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
 
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
SOURCES += \
    Calculator.cpp \
    main.cpp \
    MainWindow.cpp
 
HEADERS += \
    Calculator.h \
    MainWindow.h
 
FORMS += \
    MainWindow.ui
 
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


Calculator.h

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef CALCULATOR_H
#define CALCULATOR_H
 
 
class Calculator
{
public:
    Calculator();
 
    float add(float a, float b);
};
 
#endif // CALCULATOR_H


MainWindow.h

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private slots:
    void on_pushButton_clicked();
 
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H


Calculator.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "Calculator.h"
 
Calculator::Calculator()
{
 
}
 
float Calculator::add(float a, float b)
{
    return a + b;
}


main.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "MainWindow.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}


MainWindow.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "Calculator.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
 
void MainWindow::on_pushButton_clicked()
{
    float a = ui->aLineEdit->text().toFloat();
    float b = ui->bLineEdit->text().toFloat();
    Calculator calcultor;
    float result = calcultor.add(a, b);
    ui->resultLineEdit->setText(QString::number(result));
}



Calculator_Tests

Calculator_Tests.pro

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
include(gtest_dependency.pri)
 
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG += thread
CONFIG -= qt
 
INCLUDEPATH += "../../"
 
HEADERS += \
        ../../Calculator.h \
        tst_mycasename.h
 
SOURCES += \
        ../../Calculator.cpp \
        main.cpp


tst_mycasename.h

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef TST_MYCASENAME_H
#define TST_MYCASENAME_H
 
#include <gtest/gtest.h>
#include <gmock/gmock-matchers.h>
#include "Calculator.h"
 
using namespace testing;
 
TEST(MySuiteName, MyCaseName)
{
    Calculator calc;
    float actual = calc.add(5, 6);
    float expected = 11.0f;
    ASSERT_FLOAT_EQ(expected, actual);
}
 
#endif // TST_MYCASENAME_H


main.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
#include "tst_mycasename.h"
 
#include <gtest/gtest.h>
 
int main(int argc, char *argv[])
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}




Кроме GTest/GMock среда Qt Creator так же поддерживает подключение из исходников (без необходимости сборки из CMake) других фреймворков тестирования, вот их список:

Название: c203fdf5-bd39-430b-89ac-651a208cfea5.png
Просмотров: 7387

Размер: 3.1 Кб
Изображения
 
Вложения
Тип файла: zip Calculator_QtCpp.zip (5.4 Кб, 1215 просмотров)
Метки c++, mock, qt, unit-test
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru