2016-06-29 5 views
1

J'essaie de créer des tests pour une application C++ avec QtTest. Les trois fichiers pertinents que j'ai sont: GuiTests.cpp qui contient ma fonction principale, testsuite1.cpp qui contient mes tests et testsuite1.h qui contient les définitions de mes tests. J'ai créé ces fichiers avec l'aide de différents guides, par exemple this one.Erreur lors de l'appel de qExec "aucune conversion connue pour l'argument 1 vers QObject"

Lorsque je tente de construire je reçois cette erreur:

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

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

Je ne comprends pas pourquoi, comme vous pouvez le voir dans testsuite.h ci-dessous TestSuite1 est un QObject. La chose amusante est ce code exact (je suis assez sûr) travaillé avant, mais j'ai joué avec argc et argv à guiTest() pendant un certain temps, et après avoir enlevé argc et argv et est retourné à ce que j'avais avant (ce que je suis actuellement avoir, s'il vous plaît voir les fichiers ci-dessous) J'ai eu cette erreur.

J'ai essayé de résoudre ce problème depuis longtemps et je ne trouve pas de réponses en ligne, alors aidez-moi s'il vous plaît, toute aide est appréciée. Merci!

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" 

Répondre

3
TestSuite1 testSuite1(); 

déclare une fonction appelée testSuite1 retour TestSuite1. Prendre l'adresse de celui-ci vous donne TestSuite1 (*)() (un pointeur de fonction) au lieu de TestSuite1* qui se convertirait en QObject*.

Utiliser une des opérations suivantes:

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

pour déclarer une variable.

+1

Ah! Je savais que ça allait être quelque chose de stupide comme ça. Merci beaucoup mon pote! – Dandido