调用 qExec 时出错 "no known conversion for argument 1 to QObject"
Error when calling qExec "no known conversion for argument 1 to QObject"
我正在尝试使用 QtTest 为 C++ 应用程序创建测试。我拥有的三个相关文件是:包含我的主要功能的 GuiTests.cpp
,包含我的测试的 testsuite1.cpp
和包含我的测试定义的 testsuite1.h
。我在不同指南的帮助下创建了这些文件,例如 this one.
当我尝试构建时出现此错误:
no matching function for call to 'qExec(TestSuite1 (*)(), int&, char**&)'
no known conversion for argument 1 from 'TestSuite1 (*)()' to 'QObject*'
我不明白为什么,正如您在下面的 testsuite.h
中看到的 TestSuite1
是一个 QObject
。有趣的是这个确切的代码(我很确定)之前工作但是后来我摆弄了一段时间将 argc
和 argv
传递给 guiTest()
,然后我删除了 argc
和 argv
并回到我之前拥有的(我目前拥有的,请参阅下面的文件)我得到了这个错误。
我已经尝试解决这个问题很长时间了,但我在网上找不到任何答案,所以请帮助我,我们将不胜感激。谢谢!
GuiTests.cpp
#include "testsuite1.h"
#include <QtTest>
#include <QCoreApplication>
int main(int argc, char** argv) {
TestSuite1 testSuite1();
return QTest::qExec(&testSuite1, argc, argv);
}
testsuite1.h
#ifndef TESTSUIT1_H
#define TESTSUIT1_H
#include <QMainWindow>
#include <QObject>
#include <QWidget>
#include <QtTest>
class TestSuite1 : public QObject {
Q_OBJECT
public:
TestSuite1();
~TestSuite1();
private slots:
// functions executed by QtTest before and after test suite
void initTestCase();
void cleanupTestCase();
// functions executed by QtTest before and after each test
//void init();
//void cleanup();
// test functions
void testSomething();
void guiTest();
};
#endif // TESTSUIT1_H
testsuite1.cpp
#include "testsuite1.h"
#include <QtWidgets>
#include <QtCore>
#include <QtTest>
TestSuite1::TestSuite1()
{
}
TestSuite1::~TestSuite1()
{
}
void TestSuite1::initTestCase()
{
}
void TestSuite1::cleanupTestCase()
{
}
void TestSuite1::guiTest()
{
QVERIFY(1+1 == 2);
}
void TestSuite1::testSomething()
{
QLineEdit lineEdit;
QTest::keyClicks(&lineEdit, "hello world");
QCOMPARE(lineEdit.text(), QString("hello world"));
//QVERIFY(1+1 == 2);
}
//QTEST_MAIN(TestSuite1)
//#include "TestSuite1.moc"
TestSuite1 testSuite1();
声明一个名为 testSuite1
的函数返回 TestSuite1
。取它的地址给你 TestSuite1 (*)()
(一个函数指针)而不是 TestSuite1*
会转换为 QObject*
.
使用以下之一:
TestSuite1 testSuite1;
TestSuite1 testSuite1{};
auto testSuite1 = TestSuite();
auto testSuite1 = TestSuite{};
声明变量。
我正在尝试使用 QtTest 为 C++ 应用程序创建测试。我拥有的三个相关文件是:包含我的主要功能的 GuiTests.cpp
,包含我的测试的 testsuite1.cpp
和包含我的测试定义的 testsuite1.h
。我在不同指南的帮助下创建了这些文件,例如 this one.
当我尝试构建时出现此错误:
no matching function for call to 'qExec(TestSuite1 (*)(), int&, char**&)'
no known conversion for argument 1 from 'TestSuite1 (*)()' to 'QObject*'
我不明白为什么,正如您在下面的 testsuite.h
中看到的 TestSuite1
是一个 QObject
。有趣的是这个确切的代码(我很确定)之前工作但是后来我摆弄了一段时间将 argc
和 argv
传递给 guiTest()
,然后我删除了 argc
和 argv
并回到我之前拥有的(我目前拥有的,请参阅下面的文件)我得到了这个错误。
我已经尝试解决这个问题很长时间了,但我在网上找不到任何答案,所以请帮助我,我们将不胜感激。谢谢!
GuiTests.cpp
#include "testsuite1.h"
#include <QtTest>
#include <QCoreApplication>
int main(int argc, char** argv) {
TestSuite1 testSuite1();
return QTest::qExec(&testSuite1, argc, argv);
}
testsuite1.h
#ifndef TESTSUIT1_H
#define TESTSUIT1_H
#include <QMainWindow>
#include <QObject>
#include <QWidget>
#include <QtTest>
class TestSuite1 : public QObject {
Q_OBJECT
public:
TestSuite1();
~TestSuite1();
private slots:
// functions executed by QtTest before and after test suite
void initTestCase();
void cleanupTestCase();
// functions executed by QtTest before and after each test
//void init();
//void cleanup();
// test functions
void testSomething();
void guiTest();
};
#endif // TESTSUIT1_H
testsuite1.cpp
#include "testsuite1.h"
#include <QtWidgets>
#include <QtCore>
#include <QtTest>
TestSuite1::TestSuite1()
{
}
TestSuite1::~TestSuite1()
{
}
void TestSuite1::initTestCase()
{
}
void TestSuite1::cleanupTestCase()
{
}
void TestSuite1::guiTest()
{
QVERIFY(1+1 == 2);
}
void TestSuite1::testSomething()
{
QLineEdit lineEdit;
QTest::keyClicks(&lineEdit, "hello world");
QCOMPARE(lineEdit.text(), QString("hello world"));
//QVERIFY(1+1 == 2);
}
//QTEST_MAIN(TestSuite1)
//#include "TestSuite1.moc"
TestSuite1 testSuite1();
声明一个名为 testSuite1
的函数返回 TestSuite1
。取它的地址给你 TestSuite1 (*)()
(一个函数指针)而不是 TestSuite1*
会转换为 QObject*
.
使用以下之一:
TestSuite1 testSuite1;
TestSuite1 testSuite1{};
auto testSuite1 = TestSuite();
auto testSuite1 = TestSuite{};
声明变量。