2016-03-05 48 views
1

我有一个QT项目Test.pro并且想要在几个测试类中测试一些类。 Test.proQT测试 - 变量/对象丢失值

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它总是失去了他的价值。 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); 
} 

所以我不知道为什么变量失去其价值,以及如何解决它。

回答

1

您定义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> 

使用相同的流程解决问题。