我有一个QT项目Test.pro
,想在几个测试类中测试一些类。
测试.pro
:
QT += testlib serialport
QT -= gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
FORMS += ../Folder/mainwindow.ui
TARGET = main
CONFIG += console
CONFIG += testcase
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += \
tst_var.cpp
DEFINES += SRCDIR=\\\"$$PWD/\\\"
#LIBS += -L../libs -lserial
HEADERS += \
tst_var.h
FORMS += ../Folder/mainwindow.ui \
...
QT += gui
头文件tst_var.h
:
#ifndef TST_VAR_H
#define TST_VAR_H
#include <QObject>
#include <QtTest/QtTest>
#include <QString>
#include <iostream>
using namespace std;
class tst_var: public QObject
{
Q_OBJECT
public:
tst_var();
private slots:
void initTestCase();
void testGetName();
void cleanupTestCase();
private:
QByteArray varname;
};
#endif // TST_VAR_H
问题是无论我在哪里定义变量 varname
它总是失去他的值(value)。 tst_var.cpp
:
#include "tst_var.h"
tst_var::tst_var(){
QByteArray varname("test");
cout << "varname1:" << varname.constData() << endl;
//Output: test
}
void tst_var::initTestCase(){
//It does not make a different if I would define varname here
}
void tst_var::testGetName(){
cout << "varname2:" << varname.constData() << endl;
//Output: (nothing), so varname lose its content
}
void tst_var::cleanupTestCase(){}
我通过 main
方法开始测试。 main.cpp
:
#include <QtTest/QtTest>
#include "tst_var.h"
int main(int argc, char *argv[]) {
tst_var var;
QTest::qExec(&var);
}
所以我不知道为什么变量丢失了它的值以及如何修复它。
最佳答案
您将 tst_var 的构造函数定义为:
tst_var::tst_var(){
QByteArray varname("test");
cout << "varname1:" << varname.constData() << endl;
//Output: test
}
问题是,您定义了一个名为 varname
的本地堆栈值,它只能在构造函数内部访问。相反,您想要实际更改类的 varname
成员。
改成:
tst_var::tst_var(){
varname = QByteArray("test");
cout << "varname1:" << varname.constData() << endl;
//Output: test
}
无论 varname
是什么类型以及您拥有什么类结构,您都可能遇到同样的问题:
#include <iostream>
class tst_var {
public:
std::string varname;
void init() {
std::string varname = "hey";
std::cout<< varname <<"\n";
}
void test() {
std::cout<< varname <<"\n";
}
};
int main() {
tst_var test;
test.init();
test.test();
}
输出:
hey
<empty line>
使用相同的过程修复它可以解决问题。
关于c++ - QT 测试 - 变量/对象失去值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35817979/