测试是重中之重基础
------------------------------------------------------------------------------------------------华丽的开始线------------------------------------------------------------------------------------------------------------
首先看工程目录:
很简单就一个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函数
#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函数实现
#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编译通过的,其他的的版本请自己测试:
附上测试结果截图:
有一些失败的我是故意这样的不然全部通过好尴尬:::::