Я установил TestSuite в Qt5, в основном следуя инструкциям из здесь и здесь . Это работает как описано; Однако; когда я переключаюсь с представления Projects на Tests view, оно NOT показывает отдельные тесты классов, как показано на изображении TestsView ниже. Я ожидаю, что он покажет мой тестовый класс и отдельные слоты функций. Это полезно, когда я отлаживаю, или я хотел бы выполнить только одну тестовую функцию в тестовом классе.
Обходное решение, которое я нашел: В main. cpp, если я создаю экземпляр класса и вызываю qExe c () вместо использования QOject * для экземпляра тестового класса, тогда оно работает (покажите в main. cpp ниже); однако это противоречит цели класса тестового набора.
// testsuite.h
#pragma once
// Qt headers
#include <QObject>
#include <QtTest/QtTest>
class TestSuite : public QObject
{
Q_OBJECT
public:
explicit TestSuite();
virtual ~TestSuite();
static QVector<QObject*>& suite();
};
// testsuite.cpp
#include "testsuite.h"
#include <QDebug>
TestSuite::TestSuite()
{
suite().push_back(this);
}
TestSuite::~TestSuite() {}
QVector<QObject*>& TestSuite::suite()
{
static QVector<QObject*> instance;
return instance;
}
// main.cpp
#include "testsuite.h"
#include <QtTest>
int main(int argc, char* argv[])
{
Q_UNUSED(argc)
Q_UNUSED(argv)
int failedTestsCount = 0;
for (auto &test : TestSuite::suite()) {
int result = QTest::qExec(test);
if (result != 0) {
failedTestsCount++;
}
}
// Work around w/ #include class file
//TestExampleClass testExampleClass ;
//QTest::qExec(&testExampleClass );
return failedTestsCount;
}
// testexampleclass.h
#include <QtTest/QtTest>
#include "testsuite.h"
class TestExampleClass : public TestSuite
{
Q_OBJECT
private slots:
void test_addSomeStuff();
};
// testexampleclass.cpp
#include "testexampleclass.h"
static TestExampleClass sInstance;
// test adding list of numbers
void TestExampleClass::test_addSomeStuff()
{
QVERIFY( true );
}
Редактировать: Я использую Qt Creator 4.1.2 и Qt 5.13. 2 (MSV C 2017)