1

我正在尝试使用 QtTest 为 c++ 应用程序创建测试。我拥有的三个相关文件是:GuiTests.cpp其中包含我的主要功能,testsuite1.cpp包含我的测试以及包含我的测试testsuite1.h的定义。我在不同指南的帮助下创建了这些文件,例如这个.

当我尝试构建时,出现此错误:

no matching function for call to 'qExec(TestSuite1 (*)(), int&, char**&)'

no known conversion for argument 1 from 'TestSuite1 (*)()' to 'QObject*'

我不明白为什么,正如您在testsuite.h下面看到TestSuite1的那样QObject。有趣的是这个确切的代码(我很确定)之前工作过,但后来我摆弄argcargv一段guiTest()时间,然后我删除argcargv回到了我之前的状态(我目前拥有的,请参阅下面的文件)我收到了这个错误。

我一直在尝试解决这个问题很长时间,但我在网上找不到任何答案,所以请帮助我,感谢任何帮助。谢谢!

GuiTests.cpp

#include "testsuite1.h"
#include <QtTest>
#include <QCoreApplication>

int main(int argc, char** argv) {
    TestSuite1 testSuite1();
    return QTest::qExec(&testSuite1, argc, argv);
}

测试套件1.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

测试套件1.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"
4

1 回答 1

4
TestSuite1 testSuite1();

声明一个名为testSuite1返回的函数TestSuite1。获取它的地址会给你TestSuite1 (*)()(一个函数指针)而不是TestSuite1*转换为QObject*.

使用以下方法之一:

TestSuite1 testSuite1;
TestSuite1 testSuite1{};
auto testSuite1 = TestSuite();
auto testSuite1 = TestSuite{};

声明一个变量。

于 2016-06-29T07:21:49.107 回答