Solved how to test a function calculator( QWidget *parent)
-
button.cpp:
#include <QtWidgets>
#include "button.h"calculator.cpp:
#include <QtWidgets>
#include <cmath>
#include "button.h"
#include "calculator.h"main.cpp:
#include <QApplication>
#include "calculator.h" -
Test.cpp:
#include<QTest>
#include<calculator.h>
#include<button.h>
#include<QtWidgets>
#include<QDebug>class test1 : public QObject
{
Q_OBJECTpublic:
test1();
~test1();
private slots:
void test_case1();
void test_case2();
private:
Calculator *mcalculator;};
-
-
After including calculator.cpp i am getting error:QWidget: Must construct a Qapplication before a QWidget. And Thank You all of you for helping me.
-
@shravan_121
So you need to obey the message, exactly as it says. You need to construct yourQApplication
before you can accessQWidget
s. What else to say? -
@JonB Actually I don't know how this works and as i am new to qt I don't know how to construct QApplication
-
@shravan_121
Follow any example anywhere of how to create a basic Qt (widgets) application. Reading the docs/examples is a good place to start. Without knowing that you won't get anywhere. -
I have the application created but for testing that application I am facing this error.In that actual application Application is constructed in the main function.
-
Please read the QtTest module tutorials they show how to write unit tests.
-
I have gone through the document about unit testing.Now I have some idea on inbuilt qttest functions.But I need to clear the error of QApplication construction in QtTest application.Can Any one help me solving this.
-
Did you add the QTEST_MAIN related lines as described at the bottom of the GUI related tutorials ?
-
@SGaist I tried It but it shows some error I don't know how can you give me a sample of it
how to add QApplication related lines because i am unclear about the concept. -
@shravan_121 said in how to test a function calculator( QWidget *parent):
but it shows some error
Please post the error
-
@jsulm
Test.Cpp:
#include <QtTest/QtTest>
#include<QTest>
#include<calculator.h>
#include<button.h>
#include<QtWidgets>
#include<QDebug>
#include<QApplication>
class test1 : public QObject
{
Q_OBJECTpublic:
test1();
~test1();private slots:
void test_case1();
void test_case2();private:
Calculator *mcalculator;
};
test1::test1()
{
mcalculator = new Calculator(); //ERROR
}
-
#include <QtTest/QtTest>
#include<QTest>
#include<calculator.h>
#include<button.h>
#include<QtWidgets>
#include<QDebug>
#include<QApplication>
class test1 : public QObject
{
Q_OBJECTpublic:
test1();
~test1();private slots:
void test_case1();
void test_case2();private:
Calculator *mcalculator;
};
test1::test1()
{
mcalculator = new Calculator();//error
}
-
QTEST_APPLESS_MAIN(test1)
#include "tst_test1.moc"
-
@shravan_121
So the compiler just reports "Error" on some line? It does not have anything further than that, it just goes "Error" with no explanation? Because obviously if it did output a whole line of explanation with the error message you would paste that here when asking for help, and you have been asked for the error, wouldn't you? -
@JonB Qwidget:Must Create a Qapplication before Qwidget
-
@shravan_121 said in how to test a function calculator( QWidget *parent):
QTEST_APPLESS_MAIN
Why?!
As @SGaist suggested use QTEST_MAIN -
@shravan_121
I don't mean to be rude, but did you really read what @SGaist and others told you at look at? He suggested you useQTEST_MAIN
, and gave you the link:Implements a main() function that instantiates an application object
And you show us a snippet (don't know where from):
QTEST_APPLESS_MAIN(test1) #include "tst_test1.moc"
So you chose to use
QTEST_APPLESS_MAIN
, where https://doc.qt.io/qt-5/qtest.html#QTEST_APPLESS_MAIN states:Behaves like QTEST_MAIN(), but doesn't instantiate a QApplication object. Use this macro for really simple stand-alone non-GUI tests.
So why did you choose this, and why do you ask what to do about
Qwidget:Must Create a Qapplication before Qwidget
given that you have chosen something which states it does not create an application object and is for use in non-GUI situations?