c++ - QT 测试 - 变量/对象失去值(value)

标签 c++ qt unit-testing variables testing

我有一个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/

相关文章:

c++ - 就像儒略数是用来计算日期有没有具体的数字来计算时间

c++ - Angstrom Linux 上 BeagleBone Black 的 GPIO/模拟编程,在 Windows 上交叉开发的编译器是什么?

c++ - Qt 5 C++ HTTP POST 问题

c++ - 如何有效地调整 DirectX 窗口的大小?

c# - 如何轻松替换 Microsoft Fakes 程序集?

c++ - 并行线程,QT

multithreading - 有没有一种可移植的方式用 Qt 给线程名称?

qt - 如何确保 QWidget 在屏幕外?

javascript - 如何在单元测试中触发 FileReader 的 `onloadend`?

android - 单元测试协程 runBlockingTest : This job has not completed yet