• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed C++ Qt - Testy jednostkowe (QtTest), jest dziwny błąd!

Object Storage Arubacloud
0 głosów
300 wizyt
pytanie zadane 21 marca 2020 w C i C++ przez dawid2002 Mądrala (5,190 p.)
zamknięte 22 marca 2020 przez dawid2002

Witam! Utworzyłem projekt w Qt Creator, w którym są dwa podprojekty. Jeden to zwykły projekt do tworzenia aplikacji okienkowych a w drugim znajdują się testy. Problem polega na tym, że nie wiem jak to skonfigurować, aby projekt z testami kompilował aplikację konsolową, która wyświetla wynik testów, wykonanych na rzeczach z drugiego podprojektu. Jestem teraz w takiej sytuacji, że projekt z aplikacją okienkową kompiluje się dobrze, a projekt z testami pokazuje błąd, że nie może otworzyć pliku "ui_mainwindow.h" z drugiego projektu.

Oto struktura projektu:

zawartość pliku DoUsuniecia123.pro:

TEMPLATE = subdirs

SUBDIRS += \
    MCapp \
    TestyDoUsuniecia

plik MCapp.pro:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS


SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

plik TestyDoUsuniecia.pro:

QT += testlib
QT += gui
QT += core gui
QT += widgets
greaterThan(QT_MAJOR_VERSION, X): QT += widgets
CONFIG += qt warn_on depend_includepath testcase

TEMPLATE = app

INCLUDEPATH += \
    ../MCapp

SOURCES +=  \
    tst_testdodelete.cpp \
    ../MCapp/mainwindow.cpp \

HEADERS += \
    ../MCapp/mainwindow.h

plik z którym są testy:

#include <QtTest>
#include <QCoreApplication>

#include "mainwindow.h"

class TestDoDelete : public QObject
{
    Q_OBJECT

public:
    TestDoDelete();
    ~TestDoDelete();

private slots:
    void test_case1();

};

TestDoDelete::TestDoDelete()
{

}

TestDoDelete::~TestDoDelete()
{

}

void TestDoDelete::test_case1()
{
    MainWindow window;

    int result = window.Add(2, 2);

    QVERIFY(result == 4);
}

QTEST_MAIN(TestDoDelete)

#include "tst_testdodelete.moc"

mainwindow.h:

#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();
    int Add(int a, int b);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

plik w którym pokazuje błąd (mainwindow.cpp):

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

int MainWindow::Add(int a, int b)
{
    return a + b;
}

Z góry dziękuje za pomoc!

komentarz zamknięcia: Rozwiązałem sam swój problem.
komentarz 21 marca 2020 przez tkz Nałogowiec (42,000 p.)
komentarz 22 marca 2020 przez dawid2002 Mądrala (5,190 p.)

@tkz dzięki za pomoc, ale problem jednak nie dotyczył konfiguracji projektu, która była dobra, ale czego innego. Mianowicie nie dało się otworzyć pliku "ui_mainwindow.h" (o czym mówiłem wyżej) i ten problem można rozwiązać na dwa sposoby. Pierwszym sposobem jest dodanie:

set(CMAKE_AUTOUIC ON)

do pliku CMakeLists.txt. Aczkolwiek ja tego pliku nie mam w projekcie, więc musiałem po prostu dodać "ui_mainwindow.h" do obu projektów. On się znajduje tam gdzie jest już skompilowany program z pierwszego projektu.

komentarz 22 marca 2020 przez tkz Nałogowiec (42,000 p.)
Nie chciałem strikre rozwiązać Twojego problemu, ale zaznaczyć jak powinno wyglądać dzielnie projektu na testy i produkcję.

Podobne pytania

0 głosów
0 odpowiedzi 105 wizyt
pytanie zadane 12 września 2019 w C# przez Krst0 Obywatel (1,340 p.)
0 głosów
1 odpowiedź 2,165 wizyt
pytanie zadane 3 listopada 2019 w C i C++ przez SimiVoid Pasjonat (19,790 p.)
0 głosów
1 odpowiedź 220 wizyt
pytanie zadane 30 marca 2019 w C# przez infad Nowicjusz (120 p.)

92,568 zapytań

141,421 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...