QT测试 - 变量/对象失去价值

时间:2016-03-05 18:24:58

标签: c++ qt unit-testing variables testing

我有一个QT项目Test.pro,想要在几个测试类中测试一些类。 Test.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的位置并不重要,它总是会失去它的价值。 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 个答案:

答案 0 :(得分:1)

您将tst_var的构造函数定义为:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case REQUEST_CODE_Gallery: {
                if (requestCode == REQUEST_CODE_Gallery
                        && resultCode == Activity.RESULT_OK)

                {
                    Uri uri = data.getData();

                        try {
                            String path = getPath(uri);
                           // String p=path.replace(path, timeStamp+".jpg");
                            beginUpload(path);

                        } catch (URISyntaxException e) {
                            Toast.makeText(this,
                                    "Unable to get the file from the given URI.  See error log for details",
                                    Toast.LENGTH_LONG).show();
                            Log.e(TAG, "Unable to upload file from the given uri", e);
                        }

问题是,您定义了一个名为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();
}

使用相同的流程修复问题可以解决问题。