Юнит-тесты в проектах subdir не собраны [Qt / C ++] - PullRequest
0 голосов
/ 14 мая 2018

У меня есть проект с подпроектами в Qt / C ++, где я пытаюсь запустить проект с юнит-тестами:

enter image description here

Но когда я пытаюсь построить проект, я получаю следующую ошибку:

Undefined symbols for architecture x86_64:
  "vtable for MainWindow", referenced from:
      MainWindow::MainWindow(QWidget*) in tests.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for PaintScene", referenced from:
      PaintScene::PaintScene(QObject*) in tests.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [tests] Error 1

Но все конструкторы объявлены и определены.

paintscene:

PaintScene(QObject *parent = nullptr);

PaintScene::PaintScene(QObject *parent) : QGraphicsScene(parent)
{
    /***/
}

mainwindow

MainWindow(QWidget *parent = nullptr);

MainWindow::MainWindow(QWidget *parent) : QWidget(parent)
{
    /***/
}

tests.cpp

#include <QtTest>
#include <QCoreApplication>
#include </Users/garbart/Desktop/paint/paint/mainwindow.cpp>
#include </Users/garbart/Desktop/paint/paint/paintscene.cpp>

class UnitTests : public QObject
{
    Q_OBJECT
private slots:
    void testWidth();
    void testColor();
    void testScene();
};

void UnitTests::testWidth()
{
    PaintScene *scene = new PaintScene();
    scene->setWidth(1000);
    QCOMPARE(scene->_width, 10);
    scene->setWidth(100);
    QCOMPARE(scene->_width, 100);
    scene->setWidth(-10);
    QCOMPARE(scene->_width, 100);
}

void UnitTests::testColor()
{
    QColor qc = Qt::red;
    PaintScene *scene = new PaintScene();
    scene->set_color(qc);
    QCOMPARE(scene->_color, Qt::red);

    qc = Qt::green;
    scene->set_color(qc);
    QCOMPARE(scene->_color, Qt::green);

    qc = Qt::black;
    scene->set_color(qc);
    QCOMPARE(scene->_color, Qt::black);
}

void UnitTests::testScene()
{
    MainWindow *window = new MainWindow();

    QColor test_color = window->grab(QRect(window->rect().x() + 500, window->rect().y() + 500, 1, 1)).toImage().pixelColor(0,0);
    QCOMPARE(test_color, Qt::white);
}

QTEST_MAIN(UnitTests)

#include "tests.moc"

1 Ответ

0 голосов
/ 16 мая 2018

Это похоже на классическую ошибку компоновщика (мы не можем быть на 100% уверены, если вы не покажете нам свой заголовочный файл mainwindow.h), вы должны экспортировать свой класс MainWindow, если хотите использовать его в своем тестовом проекте (за пределами вашего проекта рисования).

см. Как экспортировать класс C ++ из DLL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...