QT5单元测试(按键测试)

时间:2022-02-06 23:13:07

测试是重中之重基础

------------------------------------------------------------------------------------------------华丽的开始线------------------------------------------------------------------------------------------------------------

首先看工程目录:

QT5单元测试(按键测试)


很简单就一个main文件TestDatas和unittest.cpp文件


那么我们来看main文件:

#include "unittest.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
UnitTest w;
w.show();
return a.exec();
}

main没有什么好看的;


再来看看unittest.h文件:

#ifndef UNITTEST_H
#define UNITTEST_H

#include <QMainWindow>
#include "ui_unittest.h"
#include <qtest.h>
#include <qwidget.h>
class UnitTest : public QMainWindow
{
Q_OBJECT

public:
UnitTest(QWidget *parent = 0);
~UnitTest();
void testDataIsSame(QString value1,QString value2);
private:
Ui::UnitTestClass ui;
};
#endif // UNITTEST_H

就写了一个testDataIsSame函数


再来看看unittest.cpp文件:

#include "unittest.h" 
#include "TestDatas.h"
UnitTest::UnitTest(QWidget *parent) : QMainWindow(parent)
{
ui.setupUi(this);
testDataIsSame("1","2");
}

void UnitTest::testDataIsSame(QString value1, QString value2){
TestData tq;
//这句是执行测试的最重要的地方
QTest::qExec(&tq);
//用户测试一个方法或者函数执行的时间
}

UnitTest::~UnitTest()
{

}

就写了一个testDataIsSame函数实现


那么我们再来看看TestDatas.h文件:

#pragma once
#include <QtTest/QtTest>
#include <QLineEdit>
class TestData : public QObject
{
Q_OBJECT
public:

TestData();
~TestData();
//每个private的slot都会被测试函数自动调用
private slots:
/*测试int类型数据*/
//对数据进行检测
void testDataIsSame();
// 以“_data”结尾的函数向对应的测试函数提供测试数据
void testDataIsSame_data();

/*测试QString类型的数据*/
//对数据进行检测
void testDataIsStrSame();
// 以“_data”结尾的函数向对应的测试函数提供测试数据
void testDataIsStrSame_data();

/*测试GUI*/
//对数据进行检测
void testGui();
// 以“_data”结尾的函数向对应的测试函数提供测试数据
void testGui_data();

public:
//测试运行速度
void writeText();
};

注释已经很清楚了


那么我们再来看看TestDatas.cpp文件:

#include "TestDatas.h"
TestData::TestData()
{

}
TestData::~TestData()
{
}

void TestData::writeText(){
QString text = "A";
text.toLower();
}
void TestData::testDataIsSame(){
// 获取测试数据
QFETCH(int, value1);
QFETCH(int, value2);
// 如果输入的两个参数不同,则会被认为测试失败
QCOMPARE(value1, value2);
}

void TestData::testDataIsStrSame(){
// 获取测试数据
QFETCH(QString, value1);
QFETCH(QString, value2);
// 如果输入的两个参数不同,则会被认为测试失败
QCOMPARE(value1.toLower(), value2);
}

void TestData::testDataIsStrSame_data(){
// 添加数据列
QTest::addColumn<QString>("value1");
QTest::addColumn<QString>("value2");
// 添加测试数据
QTest::newRow("lower") << "hello" << "hello";
QTest::newRow("mixed") << "HeLlOL" << "hello";
QTest::newRow("upper") << "HELLO" << "hello";
}


void TestData::testDataIsSame_data(){
// 添加数据列
QTest::addColumn<int>("value1");
QTest::addColumn<int>("value2");
// 添加测试数据
QTest::newRow("v1") << 1 << 1;
QTest::newRow("v3") << 2 << 2;
QTest::newRow("v2") << 1 << 2;
}

void TestData::testGui(){
QFETCH(QTestEventList, events);
QFETCH(QString, expected);
QLineEdit lineEdit;
// 模拟按键事件,并比较结果
events.simulate(&lineEdit);
/*测试两个数据是否相同*/
QCOMPARE(lineEdit.text(), expected);
}
void TestData::testGui_data(){
//添加两列的数据
QTest::addColumn<QTestEventList>("events");
QTest::addColumn<QString>("expected");

/*没有肯定失败*/
// 添加按键事件
QTestEventList list1;
//添加模拟按键a
list1.addKeyClick('a');
QTest::newRow("测试是否有按键aaaaa:") << list1 << "aaaaa";

/*有空格键可以成功*/
QTestEventList list2;
list2.addKeyClick('a');
list2.addKeyClick(Qt::Key_Backspace);
QTest::newRow("测试是否有空格键:") << list2 << "";

}

注释已经说得很清楚了,不懂可以留言:本工程是在QT5.3编译通过的,其他的的版本请自己测试:


附上测试结果截图:

QT5单元测试(按键测试)

有一些失败的我是故意这样的不然全部通过好尴尬:::::